Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
1d175f8
Add evidence-aware SV profile models
masarray Jul 12, 2026
e25fe37
Add transport-independent SV observation accumulator
masarray Jul 12, 2026
996b4fe
Add explainable SV profile detector
masarray Jul 12, 2026
aa116ea
Add SCL-versus-wire comparison engine
masarray Jul 12, 2026
770d4b4
Add SV observation accumulator tests
masarray Jul 12, 2026
37b0a4b
Add explainable SV profile detector tests
masarray Jul 12, 2026
150ade7
Add configuration-versus-wire comparison tests
masarray Jul 12, 2026
810928e
Remove proprietary benchmark names and record Gate 1 implementation
masarray Jul 12, 2026
809e431
Generalize public workflow benchmarks and record profile infrastructure
masarray Jul 12, 2026
9879eae
Use standards-neutral wording in documentation index
masarray Jul 12, 2026
c3df6d3
Record standards-neutral SV profile infrastructure
masarray Jul 12, 2026
103ed3d
Add public terminology neutrality validator
masarray Jul 12, 2026
7033b8b
Validate public terminology neutrality in CI
masarray Jul 12, 2026
396edc1
Block non-neutral terminology before Pages deployment
masarray Jul 12, 2026
cababd7
Document standards-neutral SV profile infrastructure
masarray Jul 12, 2026
9664e65
Link SV profile infrastructure documentation
masarray Jul 12, 2026
ef65397
Add evidence-aware SV profile definition template
masarray Jul 12, 2026
2223e56
Use vendor-neutral evidence intake wording
masarray Jul 12, 2026
9ae8630
Add profile definition validation tests
masarray Jul 12, 2026
de67ef9
Document public terminology neutrality policy
masarray Jul 12, 2026
8592cd6
Define compact profile detection output contract
masarray Jul 12, 2026
ca82731
Add public policy and profile output references
masarray Jul 12, 2026
44b2bd2
Add Gate 1 implementation checklist
masarray Jul 12, 2026
50016a6
Add profile work navigation note
masarray Jul 12, 2026
7ebf4e5
Clarify profile infrastructure milestone
masarray Jul 12, 2026
8ff2bdb
Summarize Gate 1 deliverables
masarray Jul 12, 2026
12fcce0
Define profile status language
masarray Jul 12, 2026
a98d318
Define profile catalog acceptance policy
masarray Jul 12, 2026
86ba2b0
Record profile evidence principles
masarray Jul 12, 2026
6627e2c
Document unknown traffic behavior
masarray Jul 12, 2026
e0a21fa
Document mismatch severity modes
masarray Jul 12, 2026
cd0a118
Document profile detector non-goals
masarray Jul 12, 2026
862fb84
Document profile score interpretation
masarray Jul 12, 2026
255f6d4
Document observation window requirements
masarray Jul 12, 2026
129614e
Document evidence source ordering
masarray Jul 12, 2026
fc150ab
Document profile engine boundary
masarray Jul 12, 2026
6537e07
Remove redundant profile navigation note
masarray Jul 12, 2026
2b5632d
Remove redundant Gate 1 summary
masarray Jul 12, 2026
d0ffa26
Remove redundant implementation note
masarray Jul 12, 2026
97ab049
Remove redundant profile catalog note
masarray Jul 12, 2026
19424bf
Remove redundant detector non-goals note
masarray Jul 12, 2026
6b96b17
Remove redundant engine boundary note
masarray Jul 12, 2026
4d57d8c
Remove redundant evidence-order note
masarray Jul 12, 2026
85b9021
Remove redundant profile evidence note
masarray Jul 12, 2026
cd52ad4
Remove redundant mismatch severity note
masarray Jul 12, 2026
c87767b
Remove redundant observation-window note
masarray Jul 12, 2026
02f75d9
Remove redundant score interpretation note
masarray Jul 12, 2026
87292a6
Remove redundant status-language note
masarray Jul 12, 2026
31d189a
Remove redundant unknown-traffic note
masarray Jul 12, 2026
7993ceb
Run public terminology validation as a dedicated CI job
masarray Jul 12, 2026
8a4f2e2
Write public terminology validation evidence
masarray Jul 12, 2026
6a419ef
Upload public terminology validation evidence
masarray Jul 12, 2026
efc21d4
Apply one-time public terminology cleanup
masarray Jul 12, 2026
fdb8056
Use neutral Subscriber positioning
masarray Jul 12, 2026
067d198
Use neutral external verification wording
masarray Jul 12, 2026
1cba745
Use neutral product language on public landing page
masarray Jul 12, 2026
1a1158c
Remove temporary public terminology workflow
masarray Jul 12, 2026
f08b0c2
Strengthen SV profile definition evidence validation
masarray Jul 12, 2026
5e5e65d
Prevent sparse evidence from producing false profile confidence
masarray Jul 12, 2026
f5c85f6
Test minimum evidence required for profile confidence
masarray Jul 12, 2026
a2342e3
Test evidence and sampling validation for profile definitions
masarray Jul 12, 2026
1539866
Raise coverage floors after profile infrastructure tests
masarray Jul 12, 2026
7a2774f
Enforce raised profile-infrastructure coverage baselines
masarray Jul 12, 2026
634aa0c
Synchronize README with profile infrastructure and coverage
masarray Jul 12, 2026
ea51e38
Synchronize build guide with profile infrastructure baselines
masarray Jul 12, 2026
e6b0823
Record profile infrastructure coverage and neutrality guards
masarray Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,34 @@ permissions:
contents: read

jobs:
public-content:
name: Validate public terminology
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7

- name: Validate public terminology neutrality
id: neutrality
continue-on-error: true
run: python3 scripts/validate-public-neutrality.py

- name: Upload terminology validation evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: arsvin-public-neutrality-report
path: artifacts/public-neutrality-report.txt
if-no-files-found: error
retention-days: 14

- name: Enforce terminology validation result
if: steps.neutrality.outcome == 'failure'
run: exit 1

build-test:
name: Build, test, and validate site
needs: public-content
runs-on: windows-2025
steps:
- name: Checkout
Expand Down Expand Up @@ -56,7 +82,7 @@ jobs:

- name: Test with whole-engine and protocol-core coverage gates
shell: pwsh
run: .\scripts\test-with-coverage.ps1 -MinimumWholeEngineLineCoverage 10.5 -MinimumLineCoverage 60 -NoRestore
run: .\scripts\test-with-coverage.ps1 -MinimumWholeEngineLineCoverage 13 -MinimumLineCoverage 70 -NoRestore

- name: Upload test and coverage evidence
if: always()
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
- 'scripts/build-public-site.py'
- 'scripts/validate-public-site.ps1'
- 'scripts/validate-public-site.py'
- 'scripts/validate-public-neutrality.py'
- '.github/workflows/pages.yml'
workflow_dispatch:

Expand All @@ -31,6 +32,9 @@ jobs:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7

- name: Validate public terminology neutrality
run: python3 scripts/validate-public-neutrality.py

- name: Build public site and HTML documentation
run: python3 scripts/build-public-site.py --output artifacts/public-site

Expand Down
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,25 @@ All notable ARSVIN changes are documented here using a lightweight Keep a Change

### Added

- Added a formal Sampled Values standards and evidence research gate covering authoritative source hierarchy, claim levels, OMICRON benchmark findings, licensed-standard gaps, and implementation acceptance rules.
- Added a formal Sampled Values standards and evidence research gate covering authoritative source hierarchy, claim levels, licensed-standard gaps, and implementation acceptance rules.
- Added a conformance and interoperability matrix separating verified, implemented-generic, provisional, unknown, and out-of-scope behavior for Layer-2 SV, 9-2LE-style workflows, IEC 61869-9, timing, scaling, redundancy, and product claims.
- Added a safe Sampled Values evidence-intake guide for anonymized SCL/PCAP cases, real-device metadata, independent verification, minimum negative tests, and evidence quality levels.
- Added transport-independent SV frame observations and an accumulator for stable-field checks, rate estimation, and sample-counter wrap detection.
- Added evidence-aware profile definitions with standards-neutral sampling, dataset, packing, payload, and source metadata.
- Added an explainable weighted profile detector that reports matches, conflicts, missing evidence, confidence, and score.
- Added strict and compatible configuration-versus-wire comparison findings without blocking capture or decoding.
- Added deterministic tests for observation windows, profile detection, evidence explanations, configuration mismatch handling, sparse-evidence confidence, and profile-definition provenance.
- Added public terminology-neutrality validation to CI and Pages deployment with retained validation evidence.

### Changed

- Documentation now prevents unverified profile constants from being promoted directly into production support claims.
- The SV roadmap now treats StationScout as a system-engineering workflow benchmark and DANEO 400 as the stronger benchmark for SCL-versus-wire verification, merging-unit analysis, timing statistics, orphan detection, triggered recording, and evidence reporting.
- Public engineering workflow targets are described generically without proprietary product comparisons or branding.
- The built-in profile catalog contains only the generic SCL-driven Layer-2 SV fallback until profile-specific requirements are verified.
- Sparse evidence can no longer produce a `Confirmed` profile result; confirmation requires sufficient evaluated evidence plus matching dataset and sampling behavior.
- Expanded the deterministic suite from 54 to 74 tests.
- Raised whole-engine coverage from 10.74% to 13.35% and the enforced floor from 10.5% to 13%.
- Raised protocol-core coverage from 64.97% to 70.47% and the enforced floor from 60% to 70%.

## 0.4.0 — 2026-07-12
### Added
Expand Down
42 changes: 33 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,23 @@ The tools are intentionally separated. Publisher evidence proves what the PC gen
- `smpCnt` continuity and stream-health diagnostics.
- Decoded instantaneous values, oscilloscope waveform, phasor, and RMS views.
- Receiver-side Markdown evidence reports.
- Shared-engine foundation for evidence-aware profile classification and configuration-versus-wire comparison; live UI integration remains a following milestone.

## Profile intelligence foundation

The shared engine now separates:

```text
Observed wire facts
Configured SCL expectations
Evidence-backed profile definitions
Explainable profile confidence
Strict or compatible mismatch findings
```

Sparse evidence cannot produce a false `Confirmed` result. Unknown or conflicting receive traffic remains observable, and the built-in catalog contains only a generic SCL-driven Layer-2 fallback until named-profile requirements are verified.

See [SV Profile Infrastructure](docs/sv-profile-infrastructure.md) and [SV Standards and Evidence Research Gate](docs/sv-research-gate.md).

## Release downloads

Expand Down Expand Up @@ -108,9 +125,11 @@ See [Quick Start](docs/quick-start.md) and [Build and Release](docs/build-and-re

| Area | Current status | Boundary |
|---|---|---|
| IEC 61850 Sampled Values APDU | Publisher and subscriber implementation for engineering/lab use | Not certified conformance testing. |
| IEC 61850-9-2LE-style 4I+4V | Supported lab profile | Validate formal requirements independently. |
| `nofASDU` | `1`, `2`, `4`, `8` | Publisher and receiver behavior is software/PC timing dependent. |
| IEC 61850 Sampled Values APDU | Publisher and Subscriber implementation for engineering/lab use | Not certified conformance testing. |
| IEC 61850-9-2LE-style 4I+4V | Implemented laboratory workflow | Formal profile verification and broader device evidence remain pending. |
| Generic SCL-driven Layer-2 SV | Dataset-aware engine foundation | Unknown layouts remain visible; unsupported payload elements are diagnosed. |
| Evidence-aware profile detection | Engine infrastructure implemented | Named-profile definitions await verified source and device evidence. |
| `nofASDU` | UI workflows emphasize `1`, `2`, `4`, `8` | Publisher and receiver behavior is software/PC timing dependent. |
| COMTRADE | ASCII, BINARY, BINARY32, FLOAT32 analog replay | Verify scaling and channel mapping before live TX. |
| PTP / `smpSynch` | Compatibility and lab behavior | Not an IEC 61850-9-3 certified clock. |
| Windows timing | Best-effort scheduling with visible health metrics | Not deterministic real-time execution. |
Expand All @@ -123,7 +142,7 @@ For users:
- Windows 10 or Windows 11, x64.
- Npcap for live capture or transmission.
- Administrator permission when required by the local Npcap/network configuration.
- Wireshark or another independent packet tool is recommended for verification.
- An independent packet dissector or process-bus analyzer is recommended for verification.

For developers:

Expand All @@ -145,34 +164,35 @@ NuGet versions are centrally managed and committed `packages.lock.json` files lo
Build all release artifacts except the installer:

```powershell
.\scripts\publish-release.ps1 -Version 0.3.1
.\scripts\publish-release.ps1 -Version 0.4.0
```

Compatibility wrapper:

```powershell
.\publish-win-x64.ps1 -Version 0.3.1
.\publish-win-x64.ps1 -Version 0.4.0
```

Run tests with both repository coverage gates and retain TRX/Cobertura evidence:

```powershell
.\scripts\test-with-coverage.ps1 -MinimumWholeEngineLineCoverage 10.5 -MinimumLineCoverage 60
.\scripts\test-with-coverage.ps1 -MinimumWholeEngineLineCoverage 13 -MinimumLineCoverage 70
```

The current suite contains 54 deterministic tests. The complete shared `ARSVIN.Engine` baseline measures 10.74% line coverage across 15,742 instrumented production lines, with 1,691 covered lines. The protocol-core regression surface measures 64.97% across 1,550 lines, with 1,007 covered lines. CI enforces floors of 10.5% for the whole engine and 60% for protocol core.
The current suite contains 74 deterministic tests. The complete shared `ARSVIN.Engine` baseline measures 13.35% line coverage across 16,312 instrumented production lines, with 2,178 covered lines. The protocol-core regression surface measures 70.47% across 2,120 lines, with 1,494 covered lines. CI enforces floors of 13% for the whole engine and 70% for protocol core.

Generate a CycloneDX SBOM after restoring the solution:

```powershell
.\scripts\generate-sbom.ps1 -Version 0.3.1
.\scripts\generate-sbom.ps1 -Version 0.4.0
```

## Repository structure

```text
src/ARSVIN.Engine/ Shared production engine project and source ownership
src/ARSVIN.Engine/AR.Iec61850/ IEC 61850, SCL, SV, MMS, capture, diagnostics, and protocol code
src/ARSVIN.Engine/AR.Iec61850/SampledValues/Profiles/ Profile observation, detection, and comparison engine
src/ARSVIN.Engine/AR.Iec61850.Transports.Npcap/ Npcap transport implementation
src/ARSVIN/ Publisher application
src/ARSVIN.Subscriber/ ArSubsv subscriber and visualization companion
Expand All @@ -191,6 +211,10 @@ The shared engine is compiled once as `ARSVIN.Engine`, and its source is physica

- [Documentation index](docs/index.md)
- [Quick start](docs/quick-start.md)
- [SV standards and evidence research gate](docs/sv-research-gate.md)
- [SV conformance and interoperability matrix](docs/sv-evidence-matrix.md)
- [SV profile infrastructure](docs/sv-profile-infrastructure.md)
- [Profile detection output contract](docs/profile-detection-output.md)
- [Subscriber verification app](docs/subscriber-verification-app.md)
- [ArSubsv SV scout companion](docs/arsubsv-sv-scout-companion.md)
- [SV profile support](docs/sv-profile-support.md)
Expand Down
4 changes: 2 additions & 2 deletions docs/arsubsv-sv-scout-companion.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

ArSubsv is the receiver-side companion application for ARSVIN. It is designed to make IEC 61850 Sampled Values visible during lab publishing, commissioning preparation, and publisher verification.

ArSubsv is not an OMICRON product and does not copy OMICRON branding or UI. Its feature target is the same engineering class: discover SV streams, subscribe to one or more streams, visualize current/voltage waveforms, calculate RMS/phase indicators, compare stream timing and counters, and export receiver-side evidence.
ArSubsv uses its own branding and interface. Its engineering purpose is to discover SV streams, subscribe to one or more streams, visualize current and voltage waveforms, calculate RMS and phase indicators, compare stream timing and counters, and export receiver-side evidence.

## Feature set

Expand All @@ -21,7 +21,7 @@ ArSubsv is not an OMICRON product and does not copy OMICRON branding or UI. Its

ArSubsv verifies that this PC and selected NIC receive and decode Sampled Values. It cannot prove that another relay, protection IED, BCU, or fault recorder has consumed the same multicast stream.

SCL binding improves decoding and validation quality. Without SCL, ArSubsv can still discover and count streams, but waveform/phasor/value visualization is limited because the payload layout is not known.
SCL binding improves decoding and validation quality. Without SCL, ArSubsv can still discover and count streams, but waveform, phasor, and value visualization is limited because the payload layout is not known.

## Capture file support

Expand Down
Loading
Loading