diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..5e4ecade --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,114 @@ +name: Engineering bug report +description: Report a reproducible ARSAS defect using synthetic or sanitized evidence. +title: "[Bug]: " +labels: + - bug +body: + - type: markdown + attributes: + value: | + Thank you for helping improve ARSAS. Do not include credentials, customer SCL files, relay settings, packet captures, disturbance records, private endpoints, or confidential station data. + + - type: input + id: arsas-version + attributes: + label: ARSAS version or commit + description: Provide the release version or full commit SHA. + placeholder: "1.6.16 or commit SHA" + validations: + required: true + + - type: input + id: engine-version + attributes: + label: ARIEC61850 version or commit + description: Provide the engine branch, release, or full commit SHA. + placeholder: "main at commit SHA" + validations: + required: true + + - type: dropdown + id: workflow + attributes: + label: Affected workflow + options: + - MMS connection or discovery + - Reporting or live monitoring + - GOOSE subscriber + - Sampled Values / SMV + - IEC 61850 file transfer or COMTRADE retrieval + - SCL import, comparison, export, or generation + - Smart Control + - Sequence of events or diagnostics + - Project persistence + - Windows packaging or installer + - UI, accessibility, or performance + - Other + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Environment + description: Include Windows version, .NET version, connection method, adapter/Npcap details when relevant, and sanitized scale information. + placeholder: | + Windows 11 24H2 + .NET 8.x + Connection: direct IP / saved project / SCL import + Scale: 3 IEDs, 1,200 selected signals + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Reproduction steps + description: Provide the smallest deterministic sequence using synthetic or sanitized data. + placeholder: | + 1. Add a synthetic IED endpoint... + 2. Discover the model... + 3. Select... + 4. Observe... + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + validations: + required: true + + - type: textarea + id: observed + attributes: + label: Observed behavior + description: Include sanitized diagnostic text and exact error messages when safe. + validations: + required: true + + - type: dropdown + id: validation-source + attributes: + label: Reproduction source + options: + - Unit test or deterministic fixture + - Loopback or simulator + - Authorized laboratory IED + - Authorized FAT/SAT/commissioning environment + - Unable to reproduce independently + validations: + required: true + + - type: checkboxes + id: safety + attributes: + label: Safety and data confirmation + options: + - label: I removed credentials, private endpoints, customer names, station identifiers, relay settings, packet captures, disturbance records, and confidential SCL or diagnostic content. + required: true + - label: This report does not claim switching authority, formal conformance, functional-safety certification, or universal interoperability. + required: true + - label: Any active testing described here was performed inside an approved boundary with the required authorization. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 6ddc4776..7cc40aa1 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,14 @@ blank_issues_enabled: false contact_links: - name: Security vulnerability - url: https://github.com/masarray/ArIED61850Tester/security - about: Review SECURITY.md and use private vulnerability reporting when available. - - name: Support and diagnostics guide - url: https://github.com/masarray/ArIED61850Tester/blob/main/SUPPORT.md - about: Review connection checks, required environment details, and sanitization rules before filing an issue. + url: https://github.com/masarray/arsas/security/advisories/new + about: Report exploitable vulnerabilities privately. Do not publish credentials, private endpoints, customer SCL, captures, relay settings, or disturbance records. + - name: Support and sanitization guidance + url: https://github.com/masarray/arsas/blob/main/SUPPORT.md + about: Review troubleshooting information and required data sanitization before opening an issue. + - name: Product roadmap + url: https://github.com/masarray/arsas/blob/main/ROADMAP.md + about: Review current capability maturity and planned IEC 61850 milestones. - name: Product website - url: https://masarray.github.io/ArIED61850Tester/ - about: Product overview, features, Smart Control, and architecture. + url: https://masarray.github.io/arsas/ + about: Explore ARSAS capabilities, architecture, Smart Control, and the full IEC 61850 product direction. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..99cfe730 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,94 @@ +name: Engineering feature proposal +description: Propose a bounded ARSAS or ARIEC61850 capability with a clear engineering outcome. +title: "[Feature]: " +labels: + - enhancement +body: + - type: markdown + attributes: + value: | + Describe the engineering problem before the preferred implementation. Large protocol changes may belong in ARIEC61850 rather than the ARSAS application layer. + + - type: textarea + id: problem + attributes: + label: Engineering problem + description: What FAT, SAT, commissioning, troubleshooting, research, or development task is difficult today? + placeholder: "During ... engineers must ... which causes ..." + validations: + required: true + + - type: textarea + id: outcome + attributes: + label: Desired outcome + description: Describe the observable result and who benefits. + validations: + required: true + + - type: dropdown + id: area + attributes: + label: IEC 61850 area + options: + - MMS discovery or services + - Reporting and DataSets + - GOOSE + - Sampled Values / SMV + - File transfer or COMTRADE + - SCL engineering or generation + - Smart Control + - SOE, diagnostics, or evidence export + - Project workflow + - UI, accessibility, or performance + - Packaging, installer, or release engineering + - Other + validations: + required: true + + - type: dropdown + id: layer + attributes: + label: Likely implementation layer + options: + - ARSAS application and UX + - ARIEC61850 protocol engine + - Both repositories + - Documentation or validation only + - Unsure + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed workflow + description: Explain the user flow, protocol evidence, failure behavior, and expected diagnostics. Avoid copying another product's UI or internal design. + validations: + required: true + + - type: textarea + id: validation + attributes: + label: Validation plan + description: Which unit tests, deterministic fixtures, simulator cases, laboratory devices, performance limits, and negative paths would demonstrate completion? + validations: + required: true + + - type: textarea + id: boundaries + attributes: + label: Safety, security, and claim boundaries + description: Identify active operations, sensitive data, operational authority, interoperability limitations, and non-goals. + validations: + required: true + + - type: checkboxes + id: provenance + attributes: + label: Provenance confirmation + options: + - label: This proposal is independently authored and does not reproduce proprietary source, documentation, tests, UI, screenshots, or restricted material. + required: true + - label: I have not attached customer, employer, station, relay-setting, credential, capture, or confidential SCL data. + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..a08e365e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,79 @@ +## Engineering problem + +Describe the IEC 61850, application, UX, packaging, documentation, or validation problem this pull request addresses. + +## Solution + +Explain what changed and why this approach belongs in ARSAS, ARIEC61850, or both. + +## Capability maturity + +- [ ] Existing available capability remains available +- [ ] Engineering-preview capability +- [ ] New available capability with completed validation +- [ ] Roadmap or documentation only +- [ ] No public capability claim changed + +## Validation + +List the checks performed and their results. + +- [ ] Source and provenance gate +- [ ] Landing-page validation, when applicable +- [ ] .NET restore and Release build +- [ ] Relevant unit or deterministic fixture tests +- [ ] Simulator or loopback validation +- [ ] Authorized laboratory IED validation +- [ ] Negative and failure-path validation +- [ ] Windows installer or portable-package validation +- [ ] Performance or allocation measurements, when applicable + +Provide details: + +```text +Commands, environment, test boundary, result, and known limitations +``` + +## IEC 61850 evidence + +For MMS, reporting, GOOSE, Sampled Values, file transfer, SCL, or control changes, describe: + +- affected services, models, or control blocks; +- expected and observed behavior; +- timestamp, quality, sequence, error, or termination evidence; +- unsupported or intentionally bounded behavior; +- ARSAS/ARIEC61850 contract changes. + +## UI and accessibility + +For UI changes, include: + +- tested Windows scaling and resolution; +- keyboard workflow; +- screen-reader or accessible-name impact where relevant; +- responsiveness or rendering impact; +- screenshots using synthetic, non-confidential data only. + +## Safety, security, and data handling + +- [ ] No credentials, private endpoints, customer names, station identifiers, relay settings, packet captures, disturbance records, or confidential SCL/project data are included. +- [ ] Active testing, if any, occurred inside an approved boundary with the required authorization. +- [ ] The change does not imply switching authority, formal conformance, functional-safety certification, cybersecurity approval, or universal interoperability. +- [ ] Downloaded files and local paths are handled safely when file-transfer behavior is affected. + +## Provenance and licensing + +- [ ] The contribution is independently authored. +- [ ] No proprietary source, documentation wording, tests, UI, screenshots, or restricted engineering material was copied. +- [ ] Third-party components and licenses are identified. +- [ ] Public license, commercial-license, and trademark wording remains accurate. +- [ ] Commits include the required DCO sign-off. + +## Documentation + +- [ ] README, website, roadmap, support, security, or engineering documentation was updated where behavior or claim boundaries changed. +- [ ] No documentation update is required. + +## Reviewer focus + +Call out the highest-risk files, assumptions, or decisions that deserve focused review. diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f177b5a8..32509e1f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build ArIED 61850 +name: Build ARSAS on: push: @@ -14,7 +14,7 @@ jobs: name: Build, validate and package Windows application runs-on: windows-latest steps: - - name: Checkout ArIED application + - name: Checkout ARSAS application shell: powershell run: | $ref = if ($env:GITHUB_HEAD_REF) { $env:GITHUB_HEAD_REF } else { $env:GITHUB_REF_NAME } @@ -140,7 +140,7 @@ jobs: - name: Upload source snapshot uses: actions/upload-artifact@v4 with: - name: ArIED61850-source-snapshot + name: ARSAS-source-snapshot path: | ArIED61850Tester/App.xaml ArIED61850Tester/MainWindow.xaml @@ -232,5 +232,5 @@ jobs: - name: Upload portable package uses: actions/upload-artifact@v4 with: - name: ArIED61850-win-x64 + name: ARSAS-win-x64 path: ArIED61850Tester\dist\*.zip diff --git a/ArIED61850Tester.csproj b/ArIED61850Tester.csproj index 35d5f4b8..93b34eb8 100644 --- a/ArIED61850Tester.csproj +++ b/ArIED61850Tester.csproj @@ -12,12 +12,16 @@ Ari Sulistiono / masarray Copyright (C) 2026 Ari Sulistiono ARSAS - ARSAS - Smart IEC 61850 Communication Tester - Smart Windows IEC 61850 communication tester for SCL-assisted project setup, interoperable Edition 1/2 SCL export, live MMS model discovery, independent multi-IED monitoring, SCL-aware GOOSE subscription, reporting diagnostics, sequence of events, and guarded Smart Control. + ARSAS - IEC 61850 Engineering Workstation + Open-source Windows IEC 61850 engineering workstation for MMS model discovery, reporting, independent multi-IED monitoring, GOOSE subscription, fault-record file transfer, Sampled Values engineering, SCL workflows, diagnostics, sequence of events, and guarded control validation. 1.6.16 1.6.16.0 1.6.16.0 - iec61850;iec-61850;mms;goose;goose-subscriber;scl;ied-explorer;multi-ied-monitoring;relay-testing;substation-automation;digital-substation;report-control-block;sequence-of-events;smart-control;wpf;dotnet + https://github.com/masarray/arsas + https://github.com/masarray/arsas + git + README.md + iec61850;iec-61850;mms;goose;sampled-values;smv;iec-61850-file-transfer;comtrade;scl;scl-generator;ied-explorer;multi-ied-monitoring;relay-testing;substation-automation;digital-substation;report-control-block;sequence-of-events;smart-control;wpf;dotnet GPL-3.0-or-later $(ARIEC61850_PROJECT) ..\ARIEC61850\src\AR.Iec61850\AR.Iec61850.csproj @@ -30,6 +34,7 @@ + @@ -39,7 +44,7 @@ - + - + ARSAS is an open-source Windows engineering workstation for IEC 61850 model discovery, + multi-IED monitoring, reporting, GOOSE subscription, file transfer, Sampled Values + engineering, SCL workflows, diagnostics, and guarded control validation. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 0dce04f9..1cc5a238 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,32 +1,34 @@ -# Community Conduct +# ARSAS Community Conduct -ArIED 61850 welcomes professional, evidence-based collaboration from engineers, developers, testers, educators, and users. +ARSAS welcomes professional, evidence-based collaboration from substation engineers, protection and control specialists, software developers, testers, educators, researchers, and users. ## Expected conduct Participants should: -- communicate respectfully and focus discussion on the engineering problem; -- distinguish observed evidence from assumptions or marketing claims; +- communicate respectfully and keep discussion focused on the engineering problem; +- distinguish observed evidence from assumptions, estimates, or marketing claims; - provide reproducible steps and synthetic examples where possible; - respect customer, employer, contributor, and third-party confidentiality; - avoid sharing credentials, restricted network details, personal information, or proprietary material; -- acknowledge operational technology risk and never pressure others to bypass site authority, isolation, or test procedures; -- accept review of licensing, provenance, safety wording, and application/engine boundaries as part of technical quality. +- acknowledge operational-technology risk and never pressure others to bypass site authority, isolation, cybersecurity, or test procedures; +- accept review of licensing, provenance, safety wording, protocol behavior, and the ARSAS/ARIEC61850 boundary as part of technical quality; +- state clearly when a feature is available, preview, planned, or unverified. ## Unacceptable conduct The project does not accept: -- harassment, personal attacks, discriminatory language, or intimidation; -- knowingly false claims about certification, affiliation, interoperability, or test evidence; -- publication of confidential project data or security-sensitive information; -- instructions to operate equipment without the required authority; -- copied proprietary source, documentation, UI assets, screenshots, or restricted test material; -- repeated disruption of issues or reviews after a decision has been explained. +- harassment, personal attacks, discriminatory language, intimidation, or retaliation; +- knowingly false claims about certification, affiliation, interoperability, safety, or test evidence; +- publication of confidential project data, security-sensitive information, relay settings, or restricted captures; +- instructions to operate equipment without the required authority and approved procedure; +- copied proprietary source, documentation, UI assets, screenshots, tests, or restricted engineering material; +- attempts to hide negative protocol evidence, unsafe behavior, provenance concerns, or licensing conflicts; +- repeated disruption of issues or reviews after a decision and its engineering basis have been explained. ## Enforcement -Maintainers may edit, hide, lock, or remove content; close issues or pull requests; or restrict participation when necessary to protect contributors, users, project integrity, legal provenance, or operational safety. +Maintainers may edit, hide, lock, or remove content; close issues or pull requests; or restrict participation when necessary to protect contributors, users, project integrity, legal provenance, confidential data, cybersecurity, or operational safety. -For sensitive conduct or security concerns, request a private contact channel without posting confidential details publicly. +For sensitive conduct or security concerns, use GitHub private vulnerability reporting when appropriate, or request a private contact channel without publishing confidential details. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 46aea1a0..dc30af2e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,18 +1,18 @@ -# Contributing to ArIED 61850 +# Contributing to ARSAS -Focused engineering contributions are welcome when they improve a reproducible application workflow and preserve the project's licensing, provenance, operational, and protocol boundaries. +Focused engineering contributions are welcome when they improve a reproducible IEC 61850 workflow and preserve the project's licensing, provenance, operational-safety, cybersecurity, and application/engine boundaries. ## Good contribution candidates -- reproducible connection or model-discovery fixes; -- report-monitoring, event, diagnostics, project, or UI improvements; -- control-workflow fixes backed by simulator or synthetic evidence; -- performance and WPF virtualization improvements; -- documentation corrections with a clear evidence basis; -- deterministic tests and synthetic SCL fixtures; -- accessibility and keyboard-workflow improvements. +- reproducible MMS connection or model-discovery fixes; +- reporting, monitoring, SOE, diagnostics, GOOSE, Sampled Values, file-transfer, SCL, control, project, or UI improvements; +- control-workflow fixes backed by simulator, synthetic, or authorized laboratory evidence; +- performance, allocation, threading, and WPF virtualization improvements; +- documentation corrections with a clear engineering basis; +- deterministic tests and synthetic SCL, protocol, or file-service fixtures; +- accessibility, keyboard workflow, high-DPI, and localization-readiness improvements. -Open an issue before beginning a large architectural change so the application/engine boundary and validation plan can be agreed first. +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. ## Development setup @@ -22,7 +22,7 @@ Use a sibling checkout unless an explicit engine path is supplied: D:\Git\ ├─ ARIEC61850\ │ └─ src\AR.Iec61850\AR.Iec61850.csproj -└─ ArIED61850Tester\ +└─ arsas\ └─ ArIED61850Tester.csproj ``` @@ -33,34 +33,44 @@ dotnet restore .\ArIED61850Tester.csproj dotnet build .\ArIED61850Tester.csproj -c Release ``` -Run the source and provenance gate: +Run the website and source/provenance gates: ```powershell +python .\scripts\validate-landing.py .\scripts\verify-source-clean.ps1 ``` +## Application and engine boundary + +- ARSAS owns projects, device-session orchestration, visualization, UX, evidence presentation, and application persistence. +- ARIEC61850 owns reusable transport, association, MMS, reporting, GOOSE, Sampled Values, file services, SCL, control, type handling, and protocol diagnostics. +- Do not duplicate protocol rules in WPF event handlers merely to make a UI feature appear complete. +- New engine contracts should be typed, bounded, independently testable, and explicit about unsupported behavior. + ## Pull-request expectations A pull request should: - explain the engineering problem and affected workflow; -- keep protocol implementation in ARIEC61850 rather than duplicating it in the WPF application; +- state whether the capability is available, engineering preview, planned, or unchanged; +- keep protocol implementation in ARIEC61850 where it belongs; - include focused validation steps and results; - avoid unrelated formatting or generated-output changes; -- use synthetic or contributor-owned test data; -- update public documentation when behavior or claim boundaries change; -- preserve the current GPL-only community release wording. +- use synthetic, public-domain, or contributor-owned test data; +- update public documentation when behavior, maturity, safety, or claim boundaries change; +- preserve the GPL community license and separate commercial-licensing wording; +- include a signed-off commit as required by the project DCO. -For UI changes, include the tested Windows scaling level and keyboard workflow. For connection, reporting, or control changes, state whether validation used unit tests, loopback, simulator, or a laboratory IED. +For UI changes, include the tested Windows scaling level, resolution, keyboard workflow, and any accessibility impact. For protocol, reporting, GOOSE, SMV, file-transfer, SCL, or control changes, state whether validation used unit tests, deterministic fixtures, loopback, simulator, or an authorized laboratory IED. ## Contribution licensing The current public project is distributed under `GPL-3.0-or-later` and maintains a separate commercial-licensing path. Before merge, contributors must: -- read and affirmatively agree to `CONTRIBUTOR-LICENSE-AGREEMENT.md`; -- sign off every commit under `DCO.txt`; +- read and affirmatively agree to [CONTRIBUTOR-LICENSE-AGREEMENT.md](CONTRIBUTOR-LICENSE-AGREEMENT.md); +- sign off every commit under [DCO.txt](DCO.txt); - have the legal right and any required employer authorization to contribute; -- avoid confidential, proprietary, restricted, or customer-owned material; +- avoid confidential, proprietary, restricted, customer-owned, or security-sensitive material; - identify any third-party component and its license before introducing it. Example sign-off: @@ -73,14 +83,14 @@ Signed-off-by: Contributor Name External software may be used only as a lawfully licensed black-box interoperability endpoint. Do not use another implementation's source code, API composition, examples, tests, documentation wording, UI, internal structure, screenshots, or extracted resources as design material. -Do not submit raw customer or employer SCL, captures, logs, screenshots, or diagnostic exports. Reconstruct the issue with synthetic data or contributor-owned material whose redistribution rights are documented. +Do not submit raw customer or employer SCL, relay settings, captures, logs, screenshots, diagnostic exports, credentials, file-service contents, or station-identifying data. Reconstruct the issue with synthetic material or contributor-owned data whose redistribution rights are documented. Read [docs/CLEAN_ROOM_AND_INTEROPERABILITY_POLICY.md](docs/CLEAN_ROOM_AND_INTEROPERABILITY_POLICY.md) before implementation work. ## Operational safety -Never perform live command or active network testing without the approved test boundary, target verification, isolation, and authority required by the site procedure. A successful software readiness check is not permission to operate equipment. +Never perform live command, report-write, file-access, or active network testing without the approved test boundary, target verification, isolation, cybersecurity permission, and authority required by the site procedure. A successful software readiness check is not permission to operate equipment. ## Reporting security issues -Follow [SECURITY.md](SECURITY.md). Do not disclose exploitable details or sensitive project data in a public issue. +Follow [SECURITY.md](SECURITY.md). Do not disclose exploitable details, credentials, private endpoints, or sensitive project data in a public issue. diff --git a/NOTICE.md b/NOTICE.md new file mode 100644 index 00000000..72882e36 --- /dev/null +++ b/NOTICE.md @@ -0,0 +1,47 @@ +# ARSAS Legal and Distribution Notice + +Copyright © 2026 Ari Sulistiono. + +## Community license + +Unless a file states otherwise, the current ARSAS community-edition source code is licensed under the **GNU General Public License, version 3 or any later version** (`GPL-3.0-or-later`). The complete license text is in [LICENSE](LICENSE). + +When you distribute a covered binary or modified version, you are responsible for satisfying the GPL requirements, including providing the corresponding source code and preserving applicable notices. + +## Commercial licensing + +A separate written commercial license may be negotiated for use cases that are incompatible with the GPL community license, including proprietary integration, closed-source redistribution, OEM or white-label distribution, project-specific development, warranty, maintenance, training, or priority support. + +See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md). A commercial option does not remove or reduce the rights already granted for GPL-covered releases. + +## Trademarks and branding + +The ARSAS name, logo, application icon, visual identity, and official-release branding are not granted for unrestricted reuse by the GPL software license. See [TRADEMARK.md](TRADEMARK.md). + +Forks and modified distributions should clearly identify that they are unofficial, should not imply endorsement, and should use distinct branding where required. + +## Third-party components + +Third-party dependencies, frameworks, drivers, protocol fixtures, icons, fonts, or other assets remain subject to their own licenses and notices. Redistributors must review the dependency and release package contents applicable to the version they distribute. + +Npcap is not distributed under the ARSAS GPL license. Installation and use remain subject to the Npcap license and the user's local policy. + +## Protocol standards and product names + +IEC, IEC 61850, COMTRADE, Windows, .NET, and other names may be trademarks or protected identifiers of their respective owners. Their use in this project describes technical compatibility, protocol scope, or platform requirements and does not imply sponsorship, certification, or endorsement. + +## No certification or operational authority + +ARSAS is an engineering and diagnostic tool. Publication of source code, successful protocol communication, or successful execution of a test does not constitute: + +- IEC 61850 conformance certification; +- universal multi-vendor interoperability approval; +- cybersecurity authorization for an operational network; +- functional-safety certification; +- switching authority, proof of isolation, or permission to operate primary equipment. + +Users remain responsible for approved procedures, network boundaries, test plans, data handling, equipment condition, and competent authorization. + +## Historical licensing + +Historical revisions may retain the terms that applied when those revisions were published. The authoritative explanation is maintained in [docs/LICENSING.md](docs/LICENSING.md). Historical terms do not automatically apply to the current main branch. diff --git a/README.md b/README.md index 4b68387b..4f55efc6 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,126 @@
- ARSAS application icon + ARSAS IEC 61850 engineering workstation logo # ARSAS -### IEC 61850 IED Explorer, Multi-Device Monitor, GOOSE Subscriber & Smart Control Workstation +### One application for practical IEC 61850 engineering -**A modern Windows engineering application for SCL-assisted workflows, live MMS model discovery, report-first monitoring, read-only GOOSE subscription, sequence-of-events analysis, diagnostics, and guarded IEC 61850 control.** +**MMS · Reporting · GOOSE · File Transfer · Sampled Values · SCL · Control · Diagnostics** -[![Build](https://github.com/masarray/ArIED61850Tester/actions/workflows/build.yml/badge.svg)](https://github.com/masarray/ArIED61850Tester/actions/workflows/build.yml) -[![Pages](https://github.com/masarray/ArIED61850Tester/actions/workflows/pages.yml/badge.svg)](https://masarray.github.io/ArIED61850Tester/) +ARSAS is an open-source Windows engineering workstation for IEC 61850 testing, commissioning, troubleshooting, model inspection, live monitoring, fault-record retrieval, and evidence-driven control workflows. + +[![Build](https://github.com/masarray/arsas/actions/workflows/build.yml/badge.svg)](https://github.com/masarray/arsas/actions/workflows/build.yml) +[![Pages](https://github.com/masarray/arsas/actions/workflows/pages.yml/badge.svg)](https://masarray.github.io/arsas/) [![License](https://img.shields.io/badge/license-GPL--3.0--or--later-2563eb)](LICENSE) [![.NET](https://img.shields.io/badge/.NET-8.0-512bd4)](https://dotnet.microsoft.com/) [![Platform](https://img.shields.io/badge/platform-Windows-0ea5e9)](#requirements) -[**Product website**](https://masarray.github.io/ArIED61850Tester/) · [**Quick start**](#quick-start) · [**Architecture**](docs/ARCHITECTURE.md) · [**GOOSE Subscriber**](docs/GOOSE_SUBSCRIBER.md) · [**Validation**](docs/VALIDATION_CHECKLIST.md) · [**Report an issue**](https://github.com/masarray/ArIED61850Tester/issues) +[**Product website**](https://masarray.github.io/arsas/) · [**Capabilities**](#capability-status) · [**Roadmap**](ROADMAP.md) · [**Architecture**](docs/ARCHITECTURE.md) · [**Report an issue**](https://github.com/masarray/arsas/issues)
-![ARSAS engineering workspace](landing/assets/hero.svg) +![ARSAS IEC 61850 workstation](landing/assets/hero.svg) -## Built for practical IEC 61850 engineering +## Why ARSAS -ARSAS brings the most common commissioning and troubleshooting workflows into one focused desktop workspace. Add an IED by IP address, import endpoints from an SCL file, verify the live MMS model, select the required signals, monitor each device independently, subscribe to station/process-bus GOOSE streams without transmitting, inspect report and event evidence, and stage supported control operations through the native ARIEC61850 control service. +IEC 61850 FAT, SAT, commissioning, and troubleshooting often require several disconnected tools, repeated model preparation, manual DataSet or RCB work, and significant setup before the first useful value appears. -The application is designed for **substation automation laboratories, FAT/SAT preparation, relay and BCU integration, commissioning support, protocol investigation, and repeatable engineering diagnostics**. It is not a formal conformance certificate and does not replace approved switching procedures, test plans, or site authority. +ARSAS is being built as a single focused workspace: enter an IED endpoint or open an SCL project, discover the live MMS model, select signals, monitor values and reports, inspect GOOSE and Sampled Values traffic, retrieve COMTRADE fault records, validate control behavior, and preserve diagnostic evidence without constantly switching applications. -## Engineering capabilities +The protocol engine lives in the separately maintained [ARIEC61850](https://github.com/masarray/ARIEC61850) repository. ARSAS remains the application, workflow, visualization, and operator-experience layer. -| Area | Current capability | -|---|---| -| **SCL workspace** | Import SCD, CID, ICD, IID, SSD, or XML files; extract configured endpoints; preserve multi-IED project context; support design-to-live verification workflows. | -| **MMS discovery** | Discover Logical Devices, Logical Nodes, Data Objects, Data Attributes, values, quality, timestamps, DataSets, RCBs, GOOSE control blocks, and available model metadata. | -| **Multi-IED sessions** | Maintain independent connection, discovery, monitoring, report, event, and lifecycle state for every configured IED. | -| **Report-first monitoring** | Prefer configured RCB/DataSet coverage, use temporary dynamic reporting where appropriate, and poll only still-uncovered points. | -| **Signal workspace** | Search, filter, sort, select visible rows, persist selections, and work efficiently with large IED models through WPF virtualization. | -| **Live monitoring** | Coalesced live values, recent-change highlighting, IED-provided timestamps, quality display, and bounded UI updates. | -| **GOOSE Subscriber** | Capture IEC 61850-8-1 GOOSE through the native ARIEC61850 Npcap transport; show APPID, MAC/VLAN, `goCBRef`, DataSet, `stNum`/`sqNum`, TAL and diagnostics; bind every ordered `allData` leaf to SCL or live-discovery DataSet metadata. | -| **Sequence of events** | Process-oriented event log, per-IED unread indicators, report reasons, and semantic state transitions. | -| **Smart Control** | Discover `ctlModel`, inspect live MMS types, execute supported Direct or Select-Before-Operate sequences, and surface termination/error evidence. | -| **Diagnostics** | Connection journal, association evidence, TCP reachability context, report and GOOSE diagnostics, command evidence, and copyable support reports. | -| **Project persistence** | Save device definitions, cached model context, selected signals, and operator workspace state for faster return visits. | - -## Workflow +## Capability status + +ARSAS uses explicit maturity labels so the public documentation does not confuse implemented features with the long-term product direction. + +| IEC 61850 area | Status | Current scope | +|---|---|---| +| **MMS client and model discovery** | Available | Association, Logical Devices, Logical Nodes, Data Objects, Data Attributes, values, quality, timestamps, DataSets, RCBs, type information, and diagnostics. | +| **Reporting and live monitoring** | Available | Static and dynamic report planning, report-first acquisition, bounded polling fallback, multi-IED monitoring, SOE, and persisted signal selections. | +| **GOOSE subscriber** | Available | Read-only Npcap capture, stream supervision, APPID/VLAN/MAC metadata, `stNum`/`sqNum`, ordered `allData`, and SCL/live-model binding. | +| **IEC 61850 file transfer** | Available | Bounded MMS file-service browsing and download workflows for disturbance and COMTRADE fault-record retrieval. | +| **Smart Control** | Available | Live `ctlModel` discovery, typed Direct and Select-Before-Operate sequences, command termination, error evidence, and process feedback. | +| **SCL workspace** | Available | SCD/CID/ICD/IID/SSD import, endpoint extraction, configured-to-live comparison context, and Edition 1/2-oriented export services. | +| **Sampled Values / SMV** | Engineering preview | Per-IED stream entry points and viewer workflow; deeper decoding, quality supervision, validation, and performance work remain active. | +| **Full SCL generation** | Roadmap | A visual project-authoring workflow for IED, communication, DataSet, report, GOOSE, Sampled Values, and export generation. | +| **Unified IEC 61850 suite** | Product direction | A complete engineer-facing environment for MMS, GOOSE, file services, Sampled Values, SCL engineering, diagnostics, testing, and evidence export. | + +See [ROADMAP.md](ROADMAP.md) for milestones, definitions of done, and non-goals. + +## Practical engineering workflow ```text -Open SCL / Open Project / Add IED - ↓ -Review configured endpoint and live connection state - ↓ -Discover or restore the IEC 61850 model - ↓ +Open SCL / Open Project / Add IED by IP address + ↓ +Discover or restore the live IEC 61850 model + ↓ Select signals and control-ready Data Objects - ↓ -Start report/poll monitoring independently per IED - ↓ -Optionally subscribe to GOOSE on an approved Npcap adapter - ↓ -Inspect live values, ordered GOOSE leaves, reports, SOE, -diagnostics, and command evidence + ↓ +Start report-first monitoring per IED + ↓ +Inspect GOOSE / SMV / reports / SOE / diagnostics + ↓ +Retrieve fault records through MMS file services + ↓ +Validate guarded control and export test evidence ``` -Each device owns its own MMS session. GOOSE capture is a separate read-only Ethernet subscriber and does not implicitly connect, monitor, control, or reconfigure an IED. +## Core capabilities -## SCL-aware GOOSE subscription +### Live MMS engineering -The **GOOSE Subscriber** tab uses ARIEC61850's raw-Ethernet parser, Npcap frame source, and `ProcessBusStreamMonitor`. It never publishes GOOSE or writes a GSEControl object. +- Independent MMS association and lifecycle per IED. +- Live discovery of model hierarchy, values, quality, timestamps, DataSets, RCBs, control blocks, and type descriptors. +- Searchable and virtualized signal workspace for large IED models. +- Configured SCL context retained beside observed live behavior. -For each detected stream, ARSAS displays: +### Report-first monitoring -1. APPID, source/destination MAC, VLAN ID/priority, `goCBRef`, `goID`, DataSet reference, and `confRev`. -2. `stNum`, `sqNum`, TimeAllowedToLive, Test, `ndsCom`, packet count, retransmission/state-change classification, and sequence/TAL diagnostics. -3. Every `allData` item in exact wire order. -4. Signal name, object reference, FC, CDC/bType, previous value, changed state, and model-binding source. +- Prefer usable report coverage before polling. +- Preserve DataSet order and report reason evidence. +- Build temporary dynamic coverage where supported. +- Keep bounded polling only for uncovered or unverified signals. +- Coalesce UI updates to remain responsive across multiple devices. -Binding priority is **loaded SCL GOOSE/DataSet model → live MMS discovery GOOSE/DataSet model → unbound ordered leaf fallback**. Model/frame count mismatches remain visible instead of being silently truncated. See [GOOSE Subscriber engineering notes](docs/GOOSE_SUBSCRIBER.md). +### GOOSE and Sampled Values -## Smart Control, without protocol guessing +- Read-only GOOSE capture through the ARIEC61850 Npcap transport. +- Stream identity, VLAN, APPID, sequence, retransmission, TAL, and model-binding diagnostics. +- Ordered `allData` presentation without silently truncating model/frame mismatches. +- Sampled Values viewer workflow under active engineering development. -For supported control objects, ARSAS reads the live model before enabling command dispatch: +### Fault-record file transfer -1. Validate the selected Data Object root. -2. Read `ctlModel` and determine the required control sequence. -3. Resolve the live `Oper`, `SBOw`, and optional `Cancel` type descriptions. -4. Locate and bind the named `ctlVal` field using the actual MMS type. -5. Preserve origin, `ctlNum`, timestamp `T`, Test, interlock, and synchrocheck values across the sequence. -6. Wait for `CommandTermination` when required by enhanced-security control models. -7. Present `ControlError`, `AddCause`, `LastApplError`, timing, and process-feedback evidence. +- Browse the IED MMS file service from the selected device context. +- Download disturbance files and COMTRADE-related records with bounded operations. +- Keep transfer diagnostics attached to the originating IED session. +- Avoid embedding customer-specific paths or assumptions in the application layer. -Supported command families currently include DPC, SPC, INC/ISC, BSC, and APC when the discovered live descriptor is operationally usable. Position objects retain operator-facing **Open / Closed** semantics while wire encoding and feedback decoding remain independently type-aware. +### Control with evidence -> ARSAS does not provide a generic control-write fallback for `.Oper`, `.SBOw`, or `.Cancel`. If the required native control contract is unavailable, the build or control readiness gate fails explicitly. +- Discover `ctlModel` before enabling an operation. +- Resolve live `Oper`, `SBOw`, and optional `Cancel` descriptors. +- Execute supported Direct or Select-Before-Operate sequences. +- Preserve origin, `ctlNum`, timestamp, Test, interlock, and synchrocheck context. +- Surface `CommandTermination`, `ControlError`, `AddCause`, `LastApplError`, timing, and mapped process feedback. -## Architecture at a glance +## Architecture ```text -┌────────────────────────────────────────────────────────────────────┐ -│ ARSAS │ -│ Explorer · Live Monitor · Event Log · GOOSE · Diagnostics · Control│ -└───────────────────────────────┬────────────────────────────────────┘ - │ typed application services -┌───────────────────────────────▼────────────────────────────────────┐ -│ ARIEC61850 │ -│ MMS · Reporting · GOOSE · Npcap · Control · SCL · Diagnostics │ -└──────────────────────┬──────────────────────────┬──────────────────┘ - │ IEC 61850 / TCP 102 │ EtherType 0x88B8 - Laboratory IEDs Station/process bus +┌──────────────────────────────────────────────────────────────────────┐ +│ ARSAS │ +│ Explorer · Monitor · SOE · GOOSE · SMV · Files · SCL · Control · UX │ +└─────────────────────────────────┬────────────────────────────────────┘ + │ typed application services +┌─────────────────────────────────▼────────────────────────────────────┐ +│ ARIEC61850 │ +│ MMS · Reporting · GOOSE · SMV · File Services · SCL · Control │ +│ Transport · Type System · Diagnostics · Protocol Validation │ +└────────────────────────┬──────────────────────┬───────────────────────┘ + │ TCP/102 │ Ethernet process bus + Laboratory IEDs Approved capture network ``` -ARSAS is the Windows application layer. The protocol implementation remains in the separately maintained [ARIEC61850](https://github.com/masarray/ARIEC61850) source repository and is referenced as sibling .NET projects at build time. +Detailed design notes are maintained in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [ENGINE_COMPATIBILITY.md](ENGINE_COMPATIBILITY.md). ## Quick start @@ -116,8 +130,8 @@ ARSAS is the Windows application layer. The protocol implementation remains in t - .NET 8 SDK - Visual Studio 2022 with **.NET desktop development**, or the .NET CLI - A compatible ARIEC61850 source checkout -- Npcap for the GOOSE Subscriber tab; administrator rights may be required by the local Npcap installation policy -- An isolated laboratory or approved commissioning network for active functions and raw-Ethernet capture +- Npcap for raw-Ethernet GOOSE and Sampled Values workflows +- An isolated laboratory or approved commissioning network ### Recommended folder layout @@ -127,7 +141,7 @@ D:\Git\ │ └─ src\ │ ├─ AR.Iec61850\AR.Iec61850.csproj │ └─ AR.Iec61850.Transports.Npcap\AR.Iec61850.Transports.Npcap.csproj -└─ ArIED61850Tester\ +└─ arsas\ └─ ArIED61850Tester.csproj ``` @@ -135,14 +149,14 @@ D:\Git\ ```powershell git clone https://github.com/masarray/ARIEC61850.git -git clone https://github.com/masarray/ArIED61850Tester.git +git clone https://github.com/masarray/arsas.git -cd ArIED61850Tester +cd arsas dotnet restore .\ArIED61850Tester.csproj dotnet build .\ArIED61850Tester.csproj -c Release ``` -To use engine checkouts in another location: +For a non-sibling engine checkout: ```powershell dotnet build .\ArIED61850Tester.csproj -c Release ` @@ -150,66 +164,44 @@ dotnet build .\ArIED61850Tester.csproj -c Release ` -p:ArIec61850NpcapProject="D:\Engineering\ARIEC61850\src\AR.Iec61850.Transports.Npcap\AR.Iec61850.Transports.Npcap.csproj" ``` -### Create a portable Windows package - -```powershell -.\scripts\publish-windows-portable.ps1 ` - -Version 1.6.16 ` - -EngineProject "D:\Engineering\ARIEC61850\src\AR.Iec61850\AR.Iec61850.csproj" -``` - -Expected output: - -```text -dist\ArIED61850-1.6.16-win-x64-portable.zip -``` - -## Operational boundary - -IEC 61850 control, report writes, temporary DataSet creation, and active network functions can affect equipment state or IED resources. Use active features only when: +## Documentation -- the test boundary, isolation, and switching authority are approved; -- the selected IED is in the intended test or maintenance condition; -- control models, feedback mapping, interlock/synchrocheck behavior, timeout, Cancel, and negative termination have been validated; -- another qualified person can independently verify the expected process response where required by the test plan. +| Document | Purpose | +|---|---| +| [Roadmap](ROADMAP.md) | Product direction from the current engineering workstation to a complete IEC 61850 suite. | +| [Documentation hub](docs/README.md) | Entry point for engineering, validation, legal, and contribution documents. | +| [Architecture](docs/ARCHITECTURE.md) | Runtime ownership, acquisition strategy, protocol boundaries, and scale. | +| [GOOSE Subscriber](docs/GOOSE_SUBSCRIBER.md) | Npcap capture, ordered data, model binding, diagnostics, and validation. | +| [Validation checklist](docs/VALIDATION_CHECKLIST.md) | Build, reporting, control, simulator, and live-test acceptance checks. | +| [Engine compatibility](ENGINE_COMPATIBILITY.md) | Required ARIEC61850 contracts and project-reference layout. | +| [Licensing](docs/LICENSING.md) | Community and commercial licensing paths. | +| [Security policy](SECURITY.md) | Responsible vulnerability reporting. | -GOOSE subscription is read-only, but capture still requires an approved adapter/network boundary. Confirm switch mirroring, VLAN/offload behavior, Npcap driver policy, and confidentiality before recording or exporting station traffic. +## Safety and operational boundaries -A successful command, report session, or GOOSE decode is protocol evidence for that test condition. It is not a universal interoperability, cybersecurity, functional-safety, or conformance claim. +IEC 61850 control, report configuration, temporary DataSet creation, file access, and active network functions can affect IED resources or equipment state. Use active features only inside an approved test boundary with suitable isolation, switching authority, procedures, and independent verification. -## Documentation +GOOSE and Sampled Values capture is read-only in ARSAS, but packet capture still requires an approved adapter, network boundary, data-handling policy, and permission to inspect or export station traffic. -| Document | Purpose | -|---|---| -| [Documentation hub](docs/README.md) | Starting point for engineering, validation, legal, and contribution documents. | -| [Architecture](docs/ARCHITECTURE.md) | Multi-IED ownership, acquisition strategy, runtime scaling, and timestamp semantics. | -| [GOOSE Subscriber](docs/GOOSE_SUBSCRIBER.md) | Npcap capture, stream supervision, ordered `allData` mapping, SCL/discovery binding, requirements, and field validation. | -| [Validation checklist](docs/VALIDATION_CHECKLIST.md) | Build, simulator, reporting, control, and live-test acceptance checks. | -| [Engine compatibility](ENGINE_COMPATIBILITY.md) | Required ARIEC61850 contracts and supported project-reference layout. | -| [Smart Control integration](ARIEC61850_SMART_CONTROL_INTEGRATION.md) | Native control-service integration details. | -| [Control feedback audit](SMART_CONTROL_FEEDBACK_AUDIT.md) | Feedback and completion evidence boundaries. | -| [Licensing](docs/LICENSING.md) | Current GPL community edition and separate commercial licensing path. | -| [Clean-room policy](docs/CLEAN_ROOM_AND_INTEROPERABILITY_POLICY.md) | Independent-development, fixture provenance, UI, and interoperability boundaries. | +ARSAS is an engineering tool. It is not an IEC 61850 conformance certificate, functional-safety certification, cybersecurity approval, or substitute for an approved commissioning procedure. -## Contributing and support +## Contributing -Engineering contributions are welcome when they are focused, reproducible, independently authored, and free of confidential customer or employer material. Read [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and [SUPPORT.md](SUPPORT.md) before opening a pull request or support issue. +Focused, reproducible, independently authored contributions are welcome. Do not submit confidential employer, customer, substation, relay-setting, SCL, credential, or packet-capture material. -For a failed connection, use **Diagnostics → Copy Diagnostic** and attach the sanitized report to the issue. Remove customer names, station identifiers, IP addressing that must remain private, credentials, packet captures, and confidential SCL content before sharing. +Read [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [SUPPORT.md](SUPPORT.md), and [NOTICE.md](NOTICE.md) before contributing or redistributing the software. ## License -The current `main` branch and current community release packages are licensed **only** under the [GNU General Public License v3.0 or later](LICENSE). - -A separate negotiated commercial license is available for proprietary integration, OEM or white-label distribution, closed-source redistribution, warranty, maintenance, priority engineering support, training, and project-specific development. See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md). +The current community edition is licensed under the **GNU General Public License v3.0 or later**. See [LICENSE](LICENSE). -Project names, logos, icons, and official-release branding are handled separately from the software license. See [TRADEMARK.md](TRADEMARK.md). +A separately negotiated commercial license is available for proprietary integration, OEM or white-label distribution, closed-source redistribution, warranty, maintenance, priority support, training, and project-specific development. See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md). -Historical revisions through `0df1007d9538b978edba67218136bc5c4f8019ad` remain available under their original terms on branch `archive/apache-2.0-final`. Those historical terms apply only to those earlier revisions. See [docs/LICENSING.md](docs/LICENSING.md). +Names, logos, icons, and official-release branding are not granted by the software license. See [TRADEMARK.md](TRADEMARK.md) and [NOTICE.md](NOTICE.md). ---
ARSAS
- Clear model evidence. Independent device sessions. Ordered GOOSE leaves. Guarded control workflows. + From an IP address or SCL file to trustworthy IEC 61850 evidence—in one engineering workspace.
diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000..1870ab39 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,130 @@ +# ARSAS Product Roadmap + +ARSAS is being developed toward a complete, engineer-facing IEC 61850 workstation. The roadmap is organized by operational capability rather than marketing labels, and it distinguishes shipped behavior from engineering previews and planned work. + +## Product vision + +The target is one application that can support the practical IEC 61850 lifecycle from engineering input to live evidence: + +```text +SCL project or IED endpoint + ↓ +Configured and live model understanding + ↓ +MMS values, reports, GOOSE, Sampled Values, files, and control + ↓ +Validation, diagnostics, evidence, and reusable project output +``` + +ARSAS is the application and workflow layer. Protocol implementation belongs in [ARIEC61850](https://github.com/masarray/ARIEC61850) so it can remain independently testable and reusable. + +## Status definitions + +- **Available** — implemented in the current mainline application and expected to remain compatible within the documented boundaries. +- **Engineering preview** — implemented enough for controlled evaluation, but validation depth, performance, interoperability, or UX is still evolving. +- **Planned** — accepted product direction without a guaranteed release date. +- **Research** — technical feasibility, interoperability, and architecture are still being evaluated. + +## Current foundation + +### Available + +- Multi-IED MMS associations and live model discovery. +- Report-first live monitoring with bounded polling fallback. +- DataSet and RCB inspection, static/dynamic report planning, SOE, and diagnostics. +- Read-only GOOSE subscription with ordered data and model binding. +- MMS file-service browsing and bounded fault-record download. +- Guarded Direct and Select-Before-Operate control workflows. +- SCL import, endpoint extraction, configured/live context, and export services. +- Project persistence, signal selection, cached model context, and diagnostic evidence. + +### Engineering preview + +- Sampled Values / SMV stream viewer and per-IED entry points. +- Broader process-bus performance and sequence-quality supervision. +- More complete fault-record classification and transfer workflow automation. + +## Milestone 1 — Complete file-transfer engineering + +**Goal:** make fault-record retrieval reliable across diverse IED file-service layouts. + +- Recursive and bounded directory browsing. +- Capability discovery and transparent negative responses. +- Download progress, cancellation, timeout, and retry boundaries. +- COMTRADE set recognition (`.cfg`, `.dat`, `.hdr`, `.inf`, vendor companions). +- Safe local naming and duplicate handling. +- Transfer evidence export and sanitized diagnostics. +- Automated engine tests for directory, open, read, close, and failure paths. + +**Definition of done:** fault records can be retrieved from representative multi-vendor test devices without vendor-specific logic in the ARSAS UI layer. + +## Milestone 2 — Production-grade Sampled Values + +**Goal:** turn the current SMV viewer direction into a validated process-bus engineering tool. + +- IEC 61850-9-2 / IEC 61869-9 stream discovery and decoding boundaries. +- APPID, VLAN, destination MAC, SVID, `smpCnt`, `confRev`, `smpSynch`, and sample-rate evidence. +- SCL binding to sampled-value control blocks and DataSets. +- Channel naming, engineering units, scaling, quality, and phase grouping. +- Loss, duplication, sequence, timing, and synchronization diagnostics. +- Efficient rolling visualization without per-sample UI allocation. +- Exportable capture summaries and validation evidence. + +**Definition of done:** representative streams can be decoded, bound to engineering context, monitored for quality, and visualized without compromising workstation responsiveness. + +## Milestone 3 — Full SCL generation workspace + +**Goal:** progress from SCL-assisted viewing/export to practical project authoring. + +- Create and edit IED, AccessPoint, Server, Logical Device, and communication structures. +- DataSet authoring with validation and stable member order. +- Report, GOOSE, and Sampled Values control-block generation. +- Communication address, APPID, VLAN, MAC, and redundancy validation. +- Edition-aware import, modification, normalization, and export. +- Schema, referential-integrity, naming, and compatibility checks. +- Visual diff between configured intent, generated output, and live model. +- Reusable templates for laboratory and commissioning projects. + +**Definition of done:** an engineer can create or modify a bounded SCL project, validate it, export it, reopen it, and compare it against a live IED without hidden data loss. + +## Milestone 4 — Unified test and evidence workspace + +**Goal:** connect protocol features into repeatable FAT, SAT, and commissioning workflows. + +- Test plans linked to IEDs, signals, control objects, and expected outcomes. +- Reusable monitoring, GOOSE, SMV, file-transfer, and control test steps. +- Time-correlated report, SOE, GOOSE, SMV, command, and transfer evidence. +- Pass/fail criteria with engineer review and explicit exceptions. +- Sanitized PDF/HTML/CSV evidence packages. +- Project snapshots for repeatable regression and customer demonstration. + +**Definition of done:** the same project can be used to prepare, execute, review, and export evidence for a controlled IEC 61850 test campaign. + +## Milestone 5 — Interoperability and maintainability + +**Goal:** keep the suite dependable as protocol coverage grows. + +- Deterministic protocol fixtures and regression captures with documented provenance. +- Capability matrices by service and tested behavior—not brand marketing claims. +- Performance budgets for association, discovery, reporting, capture, transfer, and UI updates. +- Compatibility gates between ARSAS and ARIEC61850. +- Versioned project format with migrations. +- Accessibility, keyboard workflow, localization readiness, and high-DPI validation. +- Signed releases, reproducible packaging, checksums, and software bill of materials. + +## Explicit non-goals + +ARSAS does not claim to provide: + +- automatic switching authority or proof of safe isolation; +- formal IEC 61850 conformance certification; +- universal interoperability with every implementation; +- cybersecurity approval for connection to an operational station network; +- functional-safety certification; +- unrestricted use of confidential SCL files, packet captures, credentials, or customer data. + +## Contribution priorities + +Contributions are especially valuable when they include reproducible tests, protocol fixtures with clear provenance, bounded failure behavior, diagnostic evidence, and documentation of the operational assumptions. + +Do not include proprietary source code, confidential customer files, employer material, relay settings, credentials, or packet captures that you are not authorized to publish. diff --git a/SECURITY.md b/SECURITY.md index c5884c5a..defdb7b3 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,4 +1,4 @@ -# Security Policy +# ARSAS Security Policy ## Supported code @@ -6,18 +6,18 @@ Security fixes are applied to the current `main` branch. Historical archive bran ## Reporting a vulnerability -Do not publish an issue containing an exploitable vulnerability, credential, private endpoint, customer configuration, or confidential SCL/diagnostic material. +Do not publish an issue containing an exploitable vulnerability, credential, private endpoint, customer configuration, relay setting, packet capture, file-service content, or confidential SCL/diagnostic material. Use GitHub private vulnerability reporting when it is enabled for this repository. When that channel is unavailable, open a minimal public issue requesting a private contact channel without including sensitive technical details. A useful report contains: - the affected commit or version; -- the affected workflow or component; +- the affected ARSAS or ARIEC61850 component; - reproducible steps using synthetic data; - expected and observed behavior; -- realistic impact; -- whether active network access, an IED, or operator interaction is required; +- realistic impact and preconditions; +- whether active network access, an IED, crafted SCL/file content, or operator interaction is required; - a proposed mitigation when known. ## Security scope @@ -26,17 +26,18 @@ Examples that belong in a security report include: - unintended command dispatch or bypass of a confirmation/readiness guard; - unsafe persistence or reuse of control-session state across IED associations; -- malformed network input causing code execution, data disclosure, or persistent denial of service; -- credential, path, or confidential project-data disclosure; +- malformed MMS, report, GOOSE, Sampled Values, file-service, project, or SCL input causing code execution, data disclosure, or persistent denial of service; +- path traversal or unsafe local file creation during fault-record download; +- credential, private endpoint, file path, or confidential project-data disclosure; - untrusted project/SCL content escaping its intended parser or storage boundary; -- package or release tampering; +- package, installer, update, or release tampering; - dependency vulnerabilities that are reachable in the distributed application. -Normal connection failures, unsupported IED behavior, model mismatch, report allocation rejection, and interoperability problems should normally be reported as regular engineering issues unless they create a security impact. +Normal connection failures, unsupported IED behavior, model mismatch, report allocation rejection, transfer failure, and interoperability problems should normally be reported as regular engineering issues unless they create a security impact. -## Operational technology boundary +## Operational-technology boundary -ArIED can perform active IEC 61850 operations, including control requests and report-related writes. Software readiness does not establish switching authority, equipment isolation, functional safety, cybersecurity approval, or permission to connect to an operational substation network. +ARSAS can perform active IEC 61850 operations, including control requests, report-related writes, temporary DataSet configuration, and file-service access. Software readiness does not establish switching authority, equipment isolation, functional safety, cybersecurity approval, or permission to connect to an operational substation network. Use active functions only in an approved laboratory or commissioning boundary with: @@ -44,18 +45,20 @@ Use active functions only in an approved laboratory or commissioning boundary wi - confirmed network and equipment isolation as required by site procedure; - independently verified target IED identity; - validated positive and negative control paths; +- approved packet-capture and file-access boundaries; - qualified supervision appropriate to the equipment risk. ## Sensitive-data handling -Before sharing logs, screenshots, SCL files, diagnostics, or project files, remove: +Before sharing logs, screenshots, SCL files, diagnostics, project files, captures, or downloaded records, remove: -- customer, employer, station, bay, and feeder names; +- customer, employer, station, bay, feeder, IED, and project names; - credentials, tokens, certificate material, and private keys; -- non-public IP addressing and network topology; +- non-public IP addressing, VLAN information, and network topology; - serial numbers and asset identifiers; -- proprietary configuration or vendor support material; +- relay settings, disturbance records, and proprietary configuration; +- vendor support material or licensed documentation; - personal information; -- any content restricted by contract or organizational policy. +- any content restricted by contract, law, or organizational policy. Prefer synthetic reproductions over production artifacts. diff --git a/SUPPORT.md b/SUPPORT.md index 5ab1b3f4..49b98318 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,47 +1,53 @@ -# Support +# ARSAS Support ## Before opening an issue 1. Confirm the target IP address, subnet, route, and TCP port 102 reachability. -2. Confirm the intended network adapter and disable unintended competing routes during laboratory troubleshooting when appropriate. -3. Confirm another client is not consuming the IED's available association or report resources. -4. Build the current ArIED branch against the required ARIEC61850 engine revision or branch. -5. Reproduce the problem with the smallest possible synthetic project or sanitized SCL file. +2. Confirm the intended network adapter and disable unintended competing routes during laboratory troubleshooting where appropriate. +3. Confirm another client is not consuming the IED's available association, report, control, or file-service resources. +4. Build the current ARSAS branch against the required ARIEC61850 engine revision. +5. Reproduce the problem with the smallest possible synthetic project, fixture, or sanitized SCL file. 6. Open **Diagnostics → Copy Diagnostic** and review the report before sharing it. +7. For GOOSE or Sampled Values, confirm the approved capture adapter, VLAN visibility, switch mirroring, offload behavior, and Npcap policy. +8. For file transfer, confirm the exact remote path, service response, local destination, and whether the problem is listing, opening, reading, closing, or saving. -## Engineering issue template +## Engineering issue information Include: -- ArIED version or commit; +- ARSAS version or commit; - ARIEC61850 version, branch, or commit; - Windows version and .NET SDK/runtime version; - connection method: direct IP, saved project, or SCL import; -- affected workflow: discovery, reporting, monitoring, events, control, packaging, or UI; +- affected workflow: discovery, reporting, monitoring, SOE, GOOSE, Sampled Values, file transfer, SCL, control, packaging, installer, or UI; - exact expected and observed behavior; - sanitized diagnostic report; - whether the issue is deterministic; -- whether it reproduces with the simulator or a synthetic model. +- whether it reproduces with a unit test, deterministic fixture, simulator, loopback, or authorized laboratory IED; +- relevant scale information such as IED count, selected-signal count, DataSet size, stream count, sample rate, or file size. ## Sanitization requirements -Do not attach customer or employer confidential material. Remove or replace: +Do not attach customer, employer, or station-confidential material. Remove or replace: - station, bay, feeder, IED, and project names; - credentials, tokens, certificates, and private keys; -- restricted IP addressing and network topology; +- restricted IP addressing, VLAN data, MAC addresses, and network topology; - serial numbers and asset identifiers; +- relay settings, disturbance records, raw captures, and proprietary configuration; - proprietary screenshots, manuals, support responses, or configuration exports; - personal information. Synthetic examples are preferred. -## Commercial engineering support +## Community and commercial support -The GPL community edition is available to everyone under its license. Separate commercial arrangements may cover project-specific engineering, proprietary integration rights, OEM or white-label distribution, training, validation planning, compatibility work, and priority support. +The GPL community edition is available to everyone under its license. Public issues are appropriate for reproducible bugs, documentation problems, bounded feature proposals, and interoperability evidence that can be shared safely. -See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md). The notice describes available discussion areas; commercial rights and service commitments require a separate written agreement. +Separate commercial arrangements may cover project-specific engineering, proprietary integration rights, OEM or white-label distribution, training, validation planning, compatibility work, on-site or remote commissioning support, and priority response commitments. + +See [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md). Commercial rights and service commitments require a separate written agreement. ## Operational boundary -Support guidance does not authorize command operation, switching, or connection to an operational network. The site owner, switching authority, test lead, and applicable procedures determine whether an active test is permitted. +Support guidance does not authorize command operation, switching, packet capture, file retrieval, report configuration, or connection to an operational network. The site owner, switching authority, cybersecurity owner, test lead, and applicable procedures determine whether an active test is permitted. diff --git a/landing/404.html b/landing/404.html index ebc0bdbd..e656d27a 100644 --- a/landing/404.html +++ b/landing/404.html @@ -3,7 +3,7 @@ - Page not found — ArIED 61850 + Page Not Found — ARSAS @@ -13,11 +13,12 @@
404 · Page not found -

The requested engineering page is not available.

-

The address may have changed, or the content may have moved into the repository documentation.

+

The requested ARSAS page is not available.

+

The address may have changed, or the engineering content may have moved into the repository documentation.

diff --git a/landing/architecture.html b/landing/architecture.html index 5b7adff8..0218d69a 100644 --- a/landing/architecture.html +++ b/landing/architecture.html @@ -3,72 +3,76 @@ - ARSAS Architecture — Multi-IED Sessions, Reporting & Runtime Scale - - + ARSAS Architecture — IEC 61850 Application and Engine + + - + - - - - + + + + - +
-
Application and engine boundaries

Independent device ownership above a reusable IEC 61850 engine.

ARSAS keeps the Windows operator experience and project workflow separate from protocol implementation. Each configured IED owns a dedicated runtime session while shared UI pipelines coalesce updates for responsive monitoring at scale.

+
Application and protocol boundaries

Independent device ownership above a reusable IEC 61850 engine.

ARSAS keeps the Windows engineering workflow separate from protocol implementation. Every configured IED owns an independent runtime session, while ARIEC61850 provides typed services for MMS, reporting, GOOSE, Sampled Values, files, SCL, control, and diagnostics.

-
System boundary
┌────────────────────────────────────────────────────────────────────┐
-│                             ARSAS                            │
-│                                                                    │
-│  IED Explorer  ·  Signal Workspace  ·  Live Monitor  ·  Event Log │
-│  Diagnostics   ·  Project Cache     ·  Command Panel               │
-└───────────────────────────────┬────────────────────────────────────┘
-                                │ typed application services
-┌───────────────────────────────▼────────────────────────────────────┐
-│                             ARIEC61850                             │
-│  MMS Session · Discovery · Reporting · SCL Workspace · Control    │
-│  Type Binding · CommandTermination · Protocol Diagnostics          │
-└───────────────────────────────┬────────────────────────────────────┘
-                                │ IEC 61850 over TCP / report traffic
-                          Laboratory IEDs
+
System boundary
┌────────────────────────────────────────────────────────────────────────┐
+│                                ARSAS                                   │
+│ Project · IED Explorer · Monitor · SOE · GOOSE · SMV · Files · SCL   │
+│ Diagnostics · Control Staging · Evidence · Engineer-facing UX          │
+└──────────────────────────────────┬─────────────────────────────────────┘
+                                   │ typed application services
+┌──────────────────────────────────▼─────────────────────────────────────┐
+│                             ARIEC61850                                 │
+│ Transport · Association · MMS · Reporting · GOOSE · Sampled Values   │
+│ File Services · SCL · Control · Type System · Protocol Diagnostics    │
+└──────────────────────────┬──────────────────────┬───────────────────────┘
+                           │ TCP/102              │ Ethernet process bus
+                      Laboratory IEDs         Approved capture network
-
Per-device ownership

One IED card, one session, one lifecycle.

Connection and monitoring state are not global. Stopping one device does not stop another, and a failure on one endpoint can be diagnosed without destroying the rest of the project workspace.

-

Device session

Endpoint, identity, configured context, cached model, selected points, status, and lifecycle state are owned by the device.

-

MMS association

Each connected IED has its own association, discovery progress, request routing, report sessions, and reconnect context.

-

Acquisition plan

Report candidates, dynamic reporting, uncovered polling points, aliases, and coverage evidence remain scoped to that session.

-

Event state

Unread indicators and semantic process events retain their originating IED and reference context.

-

Control context

Control descriptors and cached control-object sessions are associated with the live IED association that produced them.

-

Diagnostics

Connection, discovery, report, fallback, command, and cleanup evidence is recorded with the affected device.

+
Separation of concerns

Protocol behavior remains testable outside the UI.

The application can evolve its workflow and visualization without duplicating protocol rules, while the engine can be validated with deterministic fixtures and reused by other tools.

+
ARSAS

Project and workflow

Device cards, SCL project context, signal selection, persistence, navigation, and engineer-facing task orchestration.

+
ARSAS

Visualization and evidence

Live grids, events, GOOSE and SMV views, file-transfer UX, control staging, diagnostics, and export-ready evidence.

+
ARIEC61850

Protocol services

Transport, association, MMS services, reporting, GOOSE, Sampled Values, file services, SCL, and control sequencing.

+
ARIEC61850

Type and model handling

Live descriptors, object references, DataSets, control blocks, command structures, value decoding, and validation.

+
Shared boundary

Typed contracts

Application services expose explicit capabilities and errors rather than leaking UI assumptions into protocol implementation.

+
CI

Compatibility gate

Build-time checks fail explicitly when required ARIEC61850 contracts are missing instead of hiding degraded runtime behavior.

-
Report-first acquisition

Coverage is proven before polling is reduced.

Static configuration is useful evidence, but it is not treated as proof that every selected point will arrive in a usable report. The runtime validates coverage and maintains bounded fallback for anything still uncovered.

-
01

Build candidates

Use discovered RCB and DataSet hints to prepare the most relevant configured report groups.

+
Per-device ownership

One IED, one session, one lifecycle.

Connecting, monitoring, transferring files, viewing process-bus traffic, or staging control for one device must not silently alter another device.

+

Endpoint and identity

IP address, port, configured SCL context, discovered identity, capability state, and reconnect information belong to the device.

+

MMS association

Association, discovery progress, requests, report sessions, file services, and cleanup remain scoped to the originating IED.

+

Acquisition plan

Static reports, dynamic coverage, uncovered polling points, aliases, and source evidence are maintained per session.

+

Process-bus context

GOOSE and Sampled Values actions open with the selected IED and configured model context rather than as ambiguous global tools.

+

Control context

Control descriptors and command sessions remain associated with the live MMS association that produced them.

+

Diagnostics and events

Connection, report, sequence, file-transfer, command, and cleanup evidence retains the affected device reference.

+
+ +
Report-first acquisition

Coverage is proven before polling is reduced.

Configured report membership is valuable evidence, but it is not treated as proof that every selected point will arrive in a usable stream. The runtime validates actual coverage and retains bounded fallback.

+
01

Build report candidates

Use discovered RCB and DataSet metadata to prepare the most relevant configured groups.

02

Attempt static reporting

Reserve or enable appropriate report control blocks and validate the actual member references.

-
03

Cover the remainder

Create temporary dynamic plans for exact points not covered by usable static groups where the IED permits it.

-
04

Bound polling

Place only still-uncovered or unverified points in a priority queue serviced by the device monitor loop.

-
05

Retain evidence

Associate each value update with its acquisition source and keep alias or reference proof available for diagnostics.

+
03

Cover exact gaps

Create bounded dynamic plans for selected points not covered by usable static groups where the IED permits it.

+
04

Poll the remainder

Place only still-uncovered or unverified points in a priority queue serviced by the device monitor loop.

+
05

Retain evidence

Associate each update with timestamp, quality, reason, source, alias, and originating-device context.

-
Runtime scale

Bounded work instead of one task per signal

  • One monitoring loop per IED
  • Priority queue for uncovered polling points
  • Bounded round-robin report draining
  • Latest-value coalescing by point key
  • Batched UI updates on a shared timer
  • Bounded event and diagnostic collections
  • Row and column virtualization
Time semantics

IED time remains distinct from PC receive time

Process views use the timestamp supplied by the IED, report, or companion timestamp attribute. Local runtime time may be used internally for diagnostic ordering but is not presented as the process event timestamp.

  • No local PC timestamp presented as IED event time
  • Quality and timestamp remain part of signal evidence
  • CSV and SOE exports retain process-time semantics
  • Missing or invalid source time remains diagnosable
+
Runtime scale

Bounded work instead of one task per signal

  • One monitoring loop per IED
  • Priority queue for uncovered points
  • Bounded report draining
  • Latest-value coalescing by point key
  • Batched UI updates on a shared timer
  • Bounded event and diagnostic collections
  • Row and column virtualization
Process-bus scale

Decode fast, visualize deliberately

GOOSE and Sampled Values data rates should not force the UI to allocate or render every network sample. The architecture separates capture, decoding, supervision, aggregation, and presentation.

  • Raw capture isolated in transport services
  • Protocol parsing outside the visual tree
  • Bounded stream state and diagnostics
  • Rolling visualization at a controlled refresh rate
-
Separation of concerns

The UI stays focused because protocol state remains in the engine.

-

ARSAS application layer

Workflow navigation, device cards, signal selection, project persistence, live grids, event presentation, diagnostics UX, and command staging.

-

ARIEC61850 engine layer

Transport, association, MMS services, model discovery, report sessions, SCL workspace services, control sequencing, type binding, and protocol decoding.

-

CI compatibility gate

The build checks for required engine contracts before restore and compilation so missing APIs fail explicitly rather than producing hidden runtime degradation.

-
+
Time semantics

IED time remains distinct from PC receive time

Process views use the timestamp supplied by the IED, report, or companion timestamp attribute. Local runtime time may support diagnostic ordering but is not silently presented as process event time.

Failure semantics

Negative evidence remains visible

Association failures, unsupported services, model mismatches, report gaps, GOOSE sequence anomalies, file-service errors, and negative command termination should be explicit and attributable.

-
Source documentation

Read the detailed architecture and validation records.

The repository contains the multi-IED ownership model, engine compatibility requirements, validation checklist, reporting behavior, control integration, and clean-room boundaries.

+
Source documentation

Review the detailed architecture and engine contract.

The repository documents multi-IED ownership, engine compatibility, reporting behavior, validation boundaries, Smart Control integration, and clean-room development policy.

- + diff --git a/landing/control.html b/landing/control.html index f75f2457..b93742c2 100644 --- a/landing/control.html +++ b/landing/control.html @@ -3,61 +3,61 @@ - IEC 61850 Smart Control — Direct, SBO & Command Evidence | ARSAS - + IEC 61850 Smart Control — Direct and SBO | ARSAS + - + - - - + + + - +
-
Control-model-aware workflow

Control the intended object through the sequence the live IED actually requires.

ARSAS does not infer a command from a button label alone. It reads the live control model, resolves the command type, constructs the required Direct or Select-Before-Operate sequence, and records completion and feedback evidence for the test condition.

+
Control-model-aware validation

Control the intended object through the sequence the live IED actually requires.

ARSAS does not translate a button label into a blind write. It reads the live control model, resolves the command structure, preserves the required control context, executes the supported Direct or Select-Before-Operate sequence, and presents completion evidence.

-
Direct + SBONormal and enhanced security models
Live typesNamed ctlVal binding from actual descriptors
Typed familiesDPC, SPC, INC/ISC, BSC, APC
EvidenceTermination, error, timing, and feedback
+
Direct + SBONormal and enhanced security models
Live descriptorsNamed `ctlVal` binding from actual MMS types
Typed familiesDPC, SPC, INC/ISC, BSC, and APC
EvidenceService, termination, error, timing, and feedback
-
Discovery before dispatch

The command panel is the end of a model-resolution process.

A semantic action becomes available only after ARSAS and ARIEC61850 have enough live evidence to represent the command without positional field guessing or a generic write fallback.

-
01

Resolve the Data Object root

Normalize the selected reference and verify the expected control-object boundary.

-
02

Read `ctlModel`

Determine whether the object requires Direct or Select-Before-Operate, with normal or enhanced completion handling.

-
03

Inspect live command types

Retrieve `Oper`, `SBOw`, and optional `Cancel` type descriptions and locate the named `ctlVal` field.

-
04

Bind semantic intent

Represent Open, Close, Raise, Lower, Boolean, counter, or setpoint intent using the actual live MMS type.

-
05

Execute one immutable sequence

Preserve origin, `ctlNum`, timestamp `T`, Test, interlock, and synchrocheck values across selection and operation.

-
06

Record completion evidence

Present confirmed service results, CommandTermination, errors, AddCause, elapsed time, and mapped process feedback.

+
Discovery before dispatch

The command panel is the final step of model resolution.

A semantic action becomes available only when ARSAS and ARIEC61850 have enough live evidence to represent the command without positional guessing or a generic write fallback.

+
01

Resolve the Data Object

Normalize the selected reference and verify the control-object boundary.

+
02

Read `ctlModel`

Determine whether the object requires Direct or Select-Before-Operate, including normal or enhanced completion handling.

+
03

Inspect command descriptors

Retrieve `Oper`, `SBOw`, and optional `Cancel` type descriptions and locate the named `ctlVal` field.

+
04

Bind semantic intent

Represent Open, Close, Boolean, Raise, Lower, counter, or setpoint intent through the actual live type.

+
05

Execute one consistent sequence

Preserve origin, `ctlNum`, timestamp, Test, interlock, and synchrocheck values through selection and operation.

+
06

Record completion evidence

Present confirmed service results, `CommandTermination`, errors, `AddCause`, elapsed time, and mapped feedback.

-
Supported operator semantics

Engineering actions remain readable while wire handling stays type-aware.

The UI presents the action an engineer intends. The engine independently handles the control model and command value representation discovered from the IED.

-

Position / DPC

Open and Close actions with position feedback decoded separately from the command wire representation.

-

Boolean / SPC

True and False actions represented through the discovered single-point control type.

-

Pulse / BSC

Raise and Lower actions for supported binary step command structures.

-

Counter / INC or ISC

Typed integer command values when the live descriptor is operationally usable.

-

Setpoint / APC

Explicit setpoint entry and type-aware value binding for supported analog control objects.

-

Per-signal checks

Test, interlock, and synchrocheck request flags remain attached to the exact command row being staged.

+
Supported semantics

Readable engineering actions with type-aware wire handling.

The UI presents the operator intent. The engine independently handles the control model and value representation discovered from the IED.

+

Position / DPC

Open and Close actions with command encoding and feedback decoding treated as separate evidence.

+

Boolean / SPC

True and False actions represented through the discovered single-point command type.

+

Pulse / BSC

Raise and Lower semantics for supported binary step command structures.

+

Counter / INC or ISC

Typed integer command values when the live descriptor is usable.

+

Setpoint / APC

Explicit value entry and type-aware binding for supported analog control objects.

+

Per-command checks

Test, interlock, and synchrocheck requests remain attached to the exact command being staged.

-
Evidence shown

Protocol completion and process response

  • Detected control model and sequence
  • Confirmed MMS service result
  • Positive or negative CommandTermination
  • `ControlError`, `AddCause`, and `LastApplError`
  • Control number and origin context
  • Control-service, feedback, and total elapsed time
  • Mapped process feedback when available
Operational guardrails

Readiness is not switching authority

  • Two-step confirmation for Open and Close dispatch
  • No generic `.Oper`, `.SBOw`, or `.Cancel` write fallback
  • Control actions disabled when the descriptor is not ready
  • Test and check flags visible on the same signal row
  • Negative outcomes surfaced instead of hidden
  • Approved isolation and test authority remain external requirements
+
Evidence shown

Protocol completion and process response

  • Detected control model and selected sequence
  • Confirmed MMS service result
  • Positive or negative `CommandTermination`
  • `ControlError`, `AddCause`, and `LastApplError`
  • Control number, origin, and request flags
  • Service, feedback, and total elapsed time
  • Mapped process feedback where available
Guardrails

Protocol readiness is not switching authority

  • Two-step confirmation for Open and Close dispatch
  • No generic `.Oper`, `.SBOw`, or `.Cancel` write fallback
  • Commands disabled when the live descriptor is not ready
  • Negative outcomes remain visible
  • Approved isolation and test authority remain external requirements
  • Independent verification remains part of the test procedure
Control-model sequence matrix
Direct · normal      Oper                         → confirmed result
 SBO · normal         SBO → Oper                   → confirmed result
 Direct · enhanced    Oper                         → CommandTermination
 SBO · enhanced       SBOw → Oper                  → CommandTermination
 
-Completion evidence: service result · ControlError · AddCause · LastApplError · feedback
+Evidence: service result · ControlError · AddCause · LastApplError · feedback
-
Validation first

Exercise every control model before energised commissioning.

Validate positive and negative termination, interlock and synchrocheck rejection, Test mode, timeout, Cancel, association loss, competing-client ownership, and process feedback mapping in the approved test environment.

+
Validation first

Exercise every control model before energized commissioning.

Validate positive and negative termination, interlock and synchrocheck rejection, Test mode, timeout, Cancel, association loss, competing-client ownership, and process feedback in the approved test environment.

- + diff --git a/landing/features.html b/landing/features.html index f6cafddb..c3e8513e 100644 --- a/landing/features.html +++ b/landing/features.html @@ -3,81 +3,92 @@ - IEC 61850 Engineering Features — ARSAS - - + IEC 61850 Capabilities — MMS, GOOSE, Files, SMV | ARSAS + + - + - - - - + + + +
- - Engineering capabilities -

One workspace for configured context, live model evidence, and focused monitoring.

-

ARSAS is organized around practical commissioning and troubleshooting tasks rather than isolated protocol screens. The application keeps the configured endpoint, discovered model, selected points, report coverage, event evidence, diagnostics, and control readiness connected to the same IED session.

+ + Current scope and maturity +

IEC 61850 engineering capabilities organized around real commissioning work.

+

ARSAS connects configured context, live protocol behavior, process-bus traffic, fault records, control evidence, and reusable project state to the same IED session. Maturity labels keep shipped capability separate from preview and roadmap work.

-
-
Project input

SCL endpoint import

Open SCD, CID, ICD, IID, SSD, or XML SCL files and extract configured IED access points for project setup.

  • Multi-IED endpoint extraction
  • Duplicate endpoint protection
  • Configured context retained per device
  • Foundation for design-to-live review
-
Live model

MMS discovery

Build a usable engineering model from the connected device instead of assuming the SCL file and live server are identical.

  • Logical Devices and Logical Nodes
  • Data Objects and Data Attributes
  • Values, quality, and timestamps
  • DataSets, RCBs, and type evidence
-
Session ownership

Independent multi-IED operation

Each device has an isolated runtime lifecycle so one connection or monitoring action does not silently change another IED.

  • Per-device connection state
  • Per-device discovery progress
  • Per-device selected signals
  • Per-device events and diagnostics
-
Acquisition

Report-first monitoring

Prefer event-driven acquisition, preserve DataSet order, and reserve polling for points not proven by report coverage.

  • Static RCB/DataSet candidates first
  • Dynamic report plans for uncovered points
  • Bounded polling priority queue
  • Coverage evidence retained per signal
-
Scale

Virtualized signal workspace

Search and select large IED models without creating one timer, task, or permanent visual element per signal.

  • Search, column filters, and sorting
  • Visible-row bulk selection
  • Keyboard-driven selection workflow
  • WPF row and column virtualization
-
Operations

Live values and SOE

Separate continuously changing process values from semantic events while preserving IED-supplied time evidence.

  • Recent-change highlighting
  • Quality and source visibility
  • Semantic process-state transitions
  • Per-IED unread event indicators
-
Troubleshooting

Diagnostics journal

Expose connection and protocol progress in language that helps engineers distinguish network, association, model, report, and command failures.

  • TCP reachability context
  • Association and discovery evidence
  • Report and fallback diagnostics
  • Sanitizable Copy Diagnostic report
-
Productivity

Project and model persistence

Save the working context needed to return to a project without repeating every setup decision.

  • Device and endpoint definitions
  • Cached model context
  • Selected signals
  • Fast reconnect workflow
-
Control

Control-ready object workflow

Present semantic actions only after the native engine resolves the live control model and required MMS type information.

  • Direct and SBO model detection
  • DPC, SPC, INC/ISC, BSC, APC
  • Termination and error evidence
  • Process feedback mapping
+
+
AvailableMMS, reporting, GOOSE, files, control, SCL-assisted workflows
+
PreviewSampled Values / SMV engineering workflow
+
RoadmapFull visual SCL project generation
+
BoundaryNo conformance, safety, or universal interoperability claim
-
-
Acquisition strategy

Reports where proven. Polling where still required.

A point is not removed from polling merely because it was placed in a report candidate. ARSAS waits for usable coverage evidence and limits polling to the points that remain uncovered or unverified.

-
-
Per-IED acquisition plan
-
1. Discover DataSets and report control blocks
-2. Rank configured static coverage
-3. Enable and validate report sessions
-4. Build dynamic plans for exact uncovered points
-5. Place remaining points in bounded polling queue
- Retain source and coverage evidence per value
+
+
Available now

A coherent workflow from endpoint to evidence.

The current application already covers the highest-friction parts of practical IEC 61850 investigation and validation.

+
+
MMS

Live model discovery

Discover Logical Devices, Logical Nodes, Data Objects, Data Attributes, values, quality, timestamps, DataSets, report control blocks, control blocks, and live MMS type descriptors.

  • Independent association per IED
  • Configured and live context together
  • Searchable large-model workspace
  • Diagnostic association evidence
+
Reporting

Report-first monitoring

Prefer event-driven report coverage, preserve member order and reasons, create bounded dynamic plans where supported, and poll only points that remain uncovered.

  • Static RCB/DataSet candidates
  • Dynamic coverage for exact gaps
  • Bounded fallback polling
  • Per-value source evidence
+
GOOSE

Read-only stream inspection

Capture station or process-bus GOOSE through Npcap and retain stream identity, sequence, retransmission, TAL, and ordered payload evidence.

  • APPID, VLAN, MAC, `goCBRef`
  • `stNum`, `sqNum`, Test, `ndsCom`
  • Ordered `allData` leaves
  • SCL or live-model binding
+
File services

Fault-record retrieval

Use the selected IED context to probe the MMS file service, browse available paths, and download disturbance or COMTRADE-related records with bounded operations.

  • Per-IED endpoint ownership
  • Directory and service diagnostics
  • Progress and failure visibility
  • Foundation for COMTRADE grouping
+
SCL

Configured-to-live workflow

Open SCD, CID, ICD, IID, SSD, or XML files, extract endpoints, retain project context, and compare configured intent against observed server behavior.

  • Multi-IED endpoint extraction
  • Edition-aware workspace services
  • Configured/live comparison context
  • Export foundation
+
Control

Typed Direct and SBO

Read `ctlModel`, resolve actual command descriptors, execute supported sequences, and show service, termination, timing, error, and process-feedback evidence.

  • DPC, SPC, INC/ISC, BSC, APC
  • Direct and Select-Before-Operate
  • `CommandTermination` and `AddCause`
  • No generic control-write fallback
+
Operations

Live values and SOE

Separate continuous values from semantic events while preserving IED-supplied timestamps, quality, report reasons, and originating-device context.

  • Recent-change highlighting
  • Process timestamp semantics
  • Per-IED unread indicators
  • Bounded event collections
+
Scale

Independent multi-IED sessions

Every IED owns its connection, discovery, selected signals, reports, event state, control context, file-service workflow, and diagnostics.

  • Isolated lifecycle per device
  • One monitor loop per IED
  • Coalesced UI updates
  • Virtualized grids
+
Productivity

Project persistence

Save endpoints, cached model context, selected signals, and operator workspace state so recurring projects do not restart from zero.

  • Fast reconnect workflow
  • Retained device definitions
  • Persisted selections
  • Reusable diagnostic context
-
Designed for

Laboratory and commissioning workflows

  • FAT and SAT preparation
  • Protection IED and BCU integration
  • SCADA signal and report investigation
  • Model and timestamp troubleshooting
  • Control-sequence validation
  • Repeatable diagnostic evidence
-
Not claimed

Clear validation boundaries

  • No formal IEC 61850 conformance certificate
  • No universal multi-vendor interoperability guarantee
  • No automatic switching authority or isolation proof
  • No functional-safety certification
  • No cybersecurity approval for an operational network
  • No permission to share confidential project data
+
Engineering preview

Sampled Values / SMV

ARSAS now exposes per-IED SMV entry points and a viewer direction. Production-grade completion requires deeper stream decoding, SCL binding, scaling, sample-rate validation, sequence and synchronization diagnostics, and sustained-performance testing.

+
Roadmap

Full SCL generation

The target is a visual, validated authoring workspace for IED, communication, DataSet, report, GOOSE, Sampled Values, and Edition-aware export structures—not merely a file viewer.

-
Next

Review the control workflow in detail

See how ARSAS discovers `ctlModel`, resolves live command types, stages Direct or SBO sequences, and presents command completion evidence.

+
+
+
Acquisition strategy

Reports where proven. Polling only where required.

A point is not removed from polling merely because it was placed in a report candidate. ARSAS waits for usable coverage evidence and keeps bounded fallback for anything still uncovered or unverified.

+
Per-IED acquisition plan
1. Discover DataSets and report control blocks
+2. Rank configured static coverage
+3. Enable and validate report sessions
+4. Build dynamic plans for exact uncovered points
+5. Place remaining points in a bounded polling queue
+ Retain timestamp, quality, reason, source, and alias evidence
+
+
+ +
+
Next

See how these capabilities converge into one suite.

The public roadmap defines the next engineering milestones and a clear definition of done for file transfer, Sampled Values, SCL generation, and test evidence.

+
- + diff --git a/landing/index.html b/landing/index.html index e137ab58..65117d2d 100644 --- a/landing/index.html +++ b/landing/index.html @@ -3,43 +3,44 @@ - ARSAS — IEC 61850 IED Explorer, Monitor & Smart Control - - + ARSAS — Complete IEC 61850 Engineering Workstation + + - + - - - - - + + + + + - - - + + + @@ -73,20 +74,17 @@ @@ -95,89 +93,56 @@
- Open engineering workstation · .NET 8 -

See the model.
Understand the event.
Control with evidence.

-

ARSAS combines SCL-assisted project setup, live MMS discovery, independent multi-IED monitoring, report and SOE diagnostics, and control-model-aware command workflows in one focused Windows application.

+ Open source · Windows · .NET 8 +

One IEC 61850 workspace.
From model discovery
to trusted evidence.

+

ARSAS brings MMS, reporting, GOOSE, fault-record file transfer, Sampled Values, SCL workflows, diagnostics, sequence of events, and control validation into one focused engineering application.

- SCL and live model workflow - Independent IED sessions - GPL community edition + Independent multi-IED sessions + Protocol engine separated in ARIEC61850 + GPL-3.0-or-later community edition
-
- Stylized ARSAS interface showing IED explorer, live values and command evidence -
+
Stylized ARSAS interface showing IEC 61850 IED discovery, live values, events, and control evidence
Report-first monitoring
-
Control-model-aware workflow
+
MMS · GOOSE · Files · SMV
-
Multi-IEDIndependent connection and runtime ownership
-
SCL + LiveConfigured context and observed MMS model
-
Report firstRCB coverage before bounded polling fallback
-
Typed controlDirect and SBO sequences from live descriptors
+
MMS + ReportsLive discovery and evidence-driven acquisition
+
GOOSE + SMVStation and process-bus engineering workflows
+
Files + COMTRADEFault-record retrieval from the selected IED
+
SCL + ControlConfigured intent, generation roadmap, and typed commands
- One engineering workspace -

From configured intent to live protocol evidence

-

ARSAS is organized around the questions engineers ask on site: What is configured? What is actually online? Which values are changing? Which report path is active? Why did a command complete or fail?

+ Designed for practical engineering +

Replace fragmented setup with one traceable workflow.

+

Start from an IP address or SCL project, verify what the IED actually exposes, choose the required signals, and keep protocol evidence attached to the correct device session.

-
-
-

SCL-assisted setup

-

Import common SCL file types, extract configured IED endpoints, preserve project context, and prepare design-to-live verification without manually retyping every device.

-
- -
-
-

Live MMS model discovery

-

Explore Logical Devices, Logical Nodes, Data Objects, Data Attributes, values, quality, timestamps, DataSets, RCBs, and type information from the connected IED.

-
- -
-
-

Report-first acquisition

-

Use configured static coverage first, add temporary dynamic reporting where appropriate, and place only the remaining uncovered points into bounded MMS polling.

-
- -
-
-

Independent IED sessions

-

Every IED owns its connection, discovery state, selected signals, monitoring lifecycle, report subscriptions, event badge, and diagnostic history.

-
- -
-
-

Events and diagnostics

-

Review semantic process transitions, report reasons, quality and timestamp evidence, association progress, TCP reachability context, and a copyable support report.

-
- -
-
-

Guarded Smart Control

-

Discover the control model, bind the live `ctlVal` type, execute the required Direct or SBO sequence, and surface completion, error, timing, and feedback evidence.

-
+
Available

MMS discovery and monitoring

Discover Logical Devices, Logical Nodes, Data Objects, Data Attributes, values, quality, timestamps, DataSets, RCBs, and live type information.

+
Available

Report-first acquisition

Use proven report coverage first, add dynamic plans where supported, and poll only points that remain uncovered or unverified.

+
Available

GOOSE subscriber

Inspect APPID, VLAN, MAC, `goCBRef`, DataSet, `stNum`, `sqNum`, TAL, ordered `allData`, and model-binding evidence.

+
Available

Fault-record file transfer

Browse the MMS file service and retrieve disturbance or COMTRADE-related records through the selected IED context.

+
Engineering preview

Sampled Values

Open per-IED SMV workflows while stream decoding, SCL binding, quality supervision, visualization, and performance validation continue to mature.

+
Available

Guarded Smart Control

Resolve the live control model and actual MMS types before executing supported Direct or Select-Before-Operate sequences.

+
Available

SCL-assisted workspace

Import common SCL files, extract endpoints, retain configured project context, compare against live behavior, and use Edition-aware export services.

+
Roadmap

Full SCL generation

Create and validate IED, communication, DataSet, report, GOOSE, Sampled Values, and export structures in a visual authoring workflow.

+
Available

SOE and diagnostics

Preserve process timestamps, report reasons, sequence changes, association evidence, transfer outcomes, and command completion details.

@@ -185,60 +150,32 @@

Guarded Smart Control

- Fast workflow -

Move from file or IP address to focused evidence

-

The interface keeps setup, live model verification, signal selection, monitoring, events, diagnostics, and command evidence close together while preserving per-device ownership.

- + Minutes to useful evidence +

Enter an endpoint. Discover. Select. Test.

+

The product direction is simple: engineers should not need a chain of unrelated tools before they can demonstrate live communication, reporting, process-bus behavior, fault records, or control feedback.

-
01

Open SCL, project, or endpoint

Start from configured engineering context or add an IED directly by IP address.

-
02

Verify the live model

Connect, discover, and compare the observed MMS structure with the expected project context.

-
03

Select the engineering scope

Search, filter, sort, and persist the exact live and control objects needed for the task.

-
04

Monitor independently

Start each IED on its own lifecycle with report-first acquisition and bounded fallback.

-
05

Review evidence

Correlate values, events, report reasons, diagnostics, control completion, and process feedback.

+
01

Open SCL or add an IED

Begin from configured engineering context or enter the approved MMS endpoint directly.

+
02

Discover the live model

Verify model hierarchy, services, report objects, control blocks, file capability, and data types.

+
03

Select the engineering scope

Choose signals, report coverage, process-bus streams, files, or control objects for the task.

+
04

Observe and validate

Monitor values, reports, SOE, GOOSE, SMV, downloads, diagnostics, and command completion.

+
05

Preserve evidence

Keep the configured intent, live result, timestamp, quality, and diagnostic context available for review.

-
- Engine relationship -

Application UX above a reusable protocol engine

-

ARSAS owns the operator workflow, device cards, signal workspace, live views, event experience, diagnostics, project persistence, and command presentation. ARIEC61850 owns protocol codecs, sessions, discovery, reporting, SCL services, control sequencing, and protocol evidence.

-
    -
  • Direct project reference during build
  • -
  • No duplicated protocol stack inside the UI project
  • -
  • Explicit compatibility checks in CI
  • -
  • Native .NET service contracts end to end
  • -
-
-
- Claim boundary -

Engineering evidence, not automatic authority

-

The software can validate protocol readiness and record observed behavior. It cannot establish switching authority, plant isolation, cybersecurity approval, functional safety, or universal conformance.

-
    -
  • Use active functions only in an approved test boundary
  • -
  • Validate feedback and negative command paths
  • -
  • Sanitize SCL, captures, logs, and diagnostic reports
  • -
  • Keep customer and employer material out of public issues
  • -
-
+
Application layer

ARSAS

Owns the engineer-facing workflow: projects, device sessions, visualization, signal selection, events, file-transfer UX, control staging, and evidence presentation.

+
Protocol layer

ARIEC61850

Owns reusable protocol services: transport, association, MMS, reporting, GOOSE, Sampled Values, file services, SCL, control, type handling, and diagnostics.

-
- Open community edition -

Build a clearer IEC 61850 troubleshooting workflow

-

Clone ARSAS beside ARIEC61850, build with .NET 8, and use the documentation and validation checklists to reproduce the intended laboratory workflow.

-
- +
Product direction

A complete IEC 61850 suite without hiding maturity.

The roadmap labels each area as available, engineering preview, planned, or research—so users can see both the current value and the destination.

+
@@ -247,17 +184,13 @@

Build a clearer IEC 61850 troubleshooting workflow

- diff --git a/landing/roadmap.html b/landing/roadmap.html new file mode 100644 index 00000000..87c41b30 --- /dev/null +++ b/landing/roadmap.html @@ -0,0 +1,112 @@ + + + + + + ARSAS Roadmap — Complete IEC 61850 Engineering Suite + + + + + + + + + + + + + + + + + + +
+
+
+ + Transparent product direction +

From a capable workstation to a complete IEC 61850 engineering suite.

+

ARSAS already delivers practical MMS, reporting, GOOSE, file-transfer, SCL-assisted, diagnostic, and control workflows. The roadmap shows how these foundations will grow into production-grade Sampled Values, full SCL authoring, and reusable test evidence.

+ +
+
+ +
+
+
AvailableImplemented and documented on mainline
+
PreviewUsable for controlled engineering evaluation
+
PlannedAccepted direction without a promised date
+
ResearchFeasibility and architecture still under evaluation
+
+
+ +
+
+
Current foundation

Strong building blocks already in place.

The future suite is not a disconnected rewrite. It extends the existing per-IED runtime model and the reusable ARIEC61850 protocol engine.

+
+
Available

MMS and reporting

Independent associations, live discovery, DataSets, RCBs, report-first monitoring, bounded polling, values, quality, timestamps, SOE, and diagnostics.

+
Available

GOOSE engineering

Read-only capture, stream supervision, ordered payloads, SCL/live binding, and visible mismatch or sequence evidence.

+
Available

File transfer

MMS file-service probing, browsing, bounded download, and a focused fault-record workflow tied to the selected IED.

+
Available

Control validation

Live control-model discovery, typed Direct/SBO sequences, command termination, errors, timing, and process feedback.

+
Available

SCL-assisted workflow

Common SCL input, endpoint extraction, configured project context, live comparison foundations, and export services.

+
Preview

Sampled Values

Per-IED SMV entry points and viewer workflow ready for deeper decoding, binding, supervision, and performance validation.

+
+
+
+ +
+
+
Milestone 1

Complete fault-record file transfer.

Make IEC 61850 file services dependable across different directory layouts and disturbance-record conventions without vendor-specific assumptions in the application layer.

+
+
01

Browse safely

Recursive but bounded directory navigation, capability discovery, timeout, cancellation, and transparent negative responses.

+
02

Recognize record sets

Group `.cfg`, `.dat`, `.hdr`, `.inf`, and approved companion files without hiding raw file-service evidence.

+
03

Preserve transfer evidence

Progress, retry boundaries, local naming, duplicate handling, service results, and sanitized diagnostics.

+
+
+
+ +
+
+
Milestone 2

Production-grade Sampled Values

Develop the SMV viewer into an efficient process-bus engineering tool with stream identity, SCL binding, sample-rate and synchronization evidence, channel scaling, quality, loss, duplication, sequence, and timing diagnostics.

  • IEC 61850-9-2 / IEC 61869-9 boundaries
  • APPID, VLAN, SVID, `smpCnt`, `confRev`, `smpSynch`
  • Channel names, units, scaling, and phase grouping
  • Rolling visualization without per-sample UI allocation
+
Definition of done

Observable, bound, and responsive

Representative streams can be decoded, associated with engineering context, supervised for quality, and visualized for sustained periods without degrading the rest of the workstation.

+
+
+ +
+
+
Milestone 3

Full visual SCL generation.

Move beyond viewing and bounded export toward a validated project-authoring environment that preserves references and avoids hidden data loss.

+
+

Project structure

Create and edit IED, AccessPoint, Server, Logical Device, and communication structures.

+

DataSet authoring

Build ordered members with naming, reference, functional-constraint, and compatibility validation.

+

Control blocks

Generate report, GOOSE, and Sampled Values control blocks with explicit communication parameters.

+

Communication

Validate IP, APPID, MAC, VLAN, priority, redundancy, and cross-reference consistency.

+

Edition-aware export

Import, normalize, modify, validate, export, reopen, and compare without silent loss.

+

Configured versus live

Visually compare intended project structures against the model and services exposed by the connected IED.

+
+
+
+ +
+
+
Milestone 4

Unified test and evidence workspace

Connect monitoring, reports, GOOSE, Sampled Values, file transfer, and control into reusable FAT, SAT, commissioning, and regression test plans with time-correlated outcomes.

  • Reusable test steps and expected outcomes
  • Pass/fail with engineer review
  • Protocol and process evidence correlation
  • Sanitized HTML, PDF, and CSV packages
+
Milestone 5

Interoperability and maintainability

Protect quality as protocol coverage grows through deterministic fixtures, capability matrices, compatibility gates, performance budgets, versioned projects, signed releases, checksums, and software bills of materials.

+
+
+ +
+
Open engineering

Contribute evidence, not confidential material.

High-value contributions include reproducible tests, independently authored protocol fixtures with provenance, bounded failure behavior, performance measurements, and clear documentation.

+
+
+ + + + + diff --git a/landing/robots.txt b/landing/robots.txt index 0c96939d..5796868a 100644 --- a/landing/robots.txt +++ b/landing/robots.txt @@ -1,4 +1,4 @@ User-agent: * Allow: / -Sitemap: https://masarray.github.io/ArIED61850Tester/sitemap.xml +Sitemap: https://masarray.github.io/arsas/sitemap.xml diff --git a/landing/site.webmanifest b/landing/site.webmanifest index 9bd11ae1..6ba25fc3 100644 --- a/landing/site.webmanifest +++ b/landing/site.webmanifest @@ -1,7 +1,7 @@ { - "name": "ARSAS — IEC 61850 Engineering Workstation", + "name": "ARSAS — Complete IEC 61850 Engineering Workstation", "short_name": "ARSAS", - "description": "SCL-assisted IEC 61850 engineering, live MMS discovery, multi-IED monitoring, SOE, diagnostics, and Smart Control.", + "description": "Open-source IEC 61850 engineering for MMS, reporting, GOOSE, fault-record file transfer, Sampled Values, SCL workflows, diagnostics, and control validation.", "start_url": "./", "scope": "./", "display": "standalone", diff --git a/landing/sitemap.xml b/landing/sitemap.xml index 5ce8f515..9a906f5a 100644 --- a/landing/sitemap.xml +++ b/landing/sitemap.xml @@ -1,27 +1,33 @@ - https://masarray.github.io/ArIED61850Tester/ - 2026-07-14 + https://masarray.github.io/arsas/ + 2026-07-18 weekly 1.0 - https://masarray.github.io/ArIED61850Tester/features.html - 2026-07-14 + https://masarray.github.io/arsas/features.html + 2026-07-18 monthly 0.9 - https://masarray.github.io/ArIED61850Tester/control.html - 2026-07-14 + https://masarray.github.io/arsas/control.html + 2026-07-18 monthly 0.9 - https://masarray.github.io/ArIED61850Tester/architecture.html - 2026-07-14 + https://masarray.github.io/arsas/architecture.html + 2026-07-18 monthly 0.8 + + https://masarray.github.io/arsas/roadmap.html + 2026-07-18 + monthly + 0.9 + diff --git a/scripts/validate-landing.py b/scripts/validate-landing.py index 50395924..c3e5ba3c 100644 --- a/scripts/validate-landing.py +++ b/scripts/validate-landing.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Validate the ArIED static product website without external dependencies.""" +"""Validate the ARSAS static product website without external dependencies.""" from __future__ import annotations @@ -13,11 +13,13 @@ ROOT = Path(__file__).resolve().parents[1] SITE = ROOT / "landing" +CANONICAL_ROOT = "https://masarray.github.io/arsas/" HTML_FILES = [ SITE / "index.html", SITE / "features.html", SITE / "control.html", SITE / "architecture.html", + SITE / "roadmap.html", SITE / "404.html", ] @@ -109,7 +111,7 @@ def validate_html(page: Path, errors: list[str]) -> None: errors.append( f"{page.relative_to(ROOT)}: meta description length should be 70-220 characters, found {len(parser.description)}" ) - if not parser.canonical or not parser.canonical.startswith("https://masarray.github.io/ArIED61850Tester/"): + if not parser.canonical or not parser.canonical.startswith(CANONICAL_ROOT): errors.append(f"{page.relative_to(ROOT)}: missing or invalid canonical URL") for reference in parser.links + parser.scripts + parser.stylesheets: @@ -122,6 +124,8 @@ def validate_html(page: Path, errors: list[str]) -> None: if "http://" in text: errors.append(f"{page.relative_to(ROOT)}: insecure http:// reference") + if "ArIED61850Tester" in text or "ArIED 61850" in text: + errors.append(f"{page.relative_to(ROOT)}: contains legacy product or repository branding") def validate_structured_files(errors: list[str]) -> None: @@ -141,8 +145,17 @@ def validate_structured_files(errors: list[str]) -> None: except (OSError, ET.ParseError) as exc: errors.append(f"landing/{relative}: {exc}") + sitemap = SITE / "sitemap.xml" + if sitemap.exists(): + sitemap_text = sitemap.read_text(encoding="utf-8") + for page in ("features.html", "control.html", "architecture.html", "roadmap.html"): + expected = f"{CANONICAL_ROOT}{page}" + if expected not in sitemap_text: + errors.append(f"landing/sitemap.xml: missing {expected}") + robots = SITE / "robots.txt" - if not robots.exists() or "Sitemap: https://masarray.github.io/ArIED61850Tester/sitemap.xml" not in robots.read_text(encoding="utf-8"): + sitemap_declaration = f"Sitemap: {CANONICAL_ROOT}sitemap.xml" + if not robots.exists() or sitemap_declaration not in robots.read_text(encoding="utf-8"): errors.append("landing/robots.txt: missing canonical sitemap declaration") @@ -184,7 +197,7 @@ def main() -> int: print(f"- {error}", file=sys.stderr) return 1 - print("Landing-page validation passed: HTML, links, metadata, JSON, XML and SVG are consistent.") + print("Landing-page validation passed: HTML, links, metadata, JSON, XML, SVG, branding, and canonical URLs are consistent.") return 0 diff --git a/scripts/verify-source-clean.ps1 b/scripts/verify-source-clean.ps1 index be5be771..ff8363be 100644 --- a/scripts/verify-source-clean.ps1 +++ b/scripts/verify-source-clean.ps1 @@ -2,7 +2,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later <# .SYNOPSIS - Verifies that every Git-tracked ArIED path is free from prohibited binaries, + Verifies that every Git-tracked ARSAS path is free from prohibited binaries, captures, confidential evidence, external-product identifiers, proprietary assets, obsolete license files, and superseded public wording. @@ -148,7 +148,7 @@ if ($Problems.Count -gt 0) { foreach ($problem in ($Problems | Sort-Object -Unique)) { Write-Host "ERROR: $problem" -ForegroundColor Red } - throw "ArIED source tree failed clean-room validation with $($Problems.Count) problem(s)." + throw "ARSAS source tree failed clean-room validation with $($Problems.Count) problem(s)." } -Write-Host "All Git-tracked ArIED content passed source, website, external-IP, and current-license checks." -ForegroundColor Green +Write-Host "All Git-tracked ARSAS content passed source, website, external-IP, and current-license checks." -ForegroundColor Green