ARSVIN GitHub

Sampled Values Profile Infrastructure

ARSVIN separates observed wire facts, configured expectations, and profile claims. This keeps the engine useful for unknown traffic while preventing unverified profile constants from becoming production claims.

Data flow

Live Npcap frame ─┐
                  ├── SvStreamObservationManager
Imported PCAP ────┘          ↓
                     per-stream bounded window
                              ↓
                    SvObservedStreamFacts
                         ├── SvProfileDetector
                         └── SvConfigurationComparer

The profile infrastructure is part of the shared ARSVIN.Engine assembly and has no dependency on WPF or Npcap. Subscriber live capture and PCAP replay use the same manager and stable stream identity, so both paths produce the same facts and diagnostics contract.

Observed facts

An observation window can describe:

Fields that change during the window become unknown with a diagnostic instead of producing a false stable value.

Profile definitions

A profile definition can carry:

The built-in catalog currently contains only a generic SCL-driven Layer-2 SV fallback. Numeric definitions for named profiles remain outside the production catalog until the research gate is satisfied.

Explainable detection

SvProfileDetector evaluates only facts present in both the observation and definition. Each evaluated field produces one of:

Results include weighted evidence, score, matched and conflicting weight, and confidence:

Unknown
Possible
Likely
Confirmed
Conflict

A high score is an engineering classification result, not a conformance certificate.

Configuration-versus-wire comparison

SvExpectedStreamConfigurationFactory converts the SCL-bound SampledValuesPublisherProfile into a transport-neutral SvExpectedStreamConfiguration. The expected configuration includes addressing, identifiers, revision, packing, payload length, declared sampling fields, and ordered dataset signature.

SvStreamObservationManager compares that expected configuration with the rolling SvObservedStreamFacts for every bound live or PCAP stream. The resulting immutable snapshot carries:

Two modes are available:

Neither mode stops receive-side capture or decoding. Unknown and conflicting streams remain visible.

Before accepting an SCL candidate, the observation manager requires APPID, destination MAC, and VLAN to identify the same configured stream. A candidate that fails this address gate is rejected instead of contaminating observed facts with the wrong dataset layout.

Subscriber compact state

The selected stream exposes one compact analysis strip instead of permanent large evidence cards:

PROFILE       Generic Layer-2 SV
CONFIDENCE    Unknown · insufficient evidence
SCL MATCH     Exact | N warnings | N errors
WINDOW        duration · observed samples

Detailed detector evidence, configuration findings, and observation diagnostics remain collapsed behind an expandable evidence panel. Capture and visualization continue without requiring repeated manual selection.

Waveform, phasor, and RMS collections use one reset notification per UI refresh. The visual layer withholds partial waveform windows until a complete two-cycle set is available, then retains the most recent complete window if the next refresh is incomplete. Compatible SCL warnings remain warnings and do not force the stream into a blocking BAD state.

Evidence report bundle

Subscriber Export creates two files from the same report snapshot:

Both files include:

Unknown nullable values remain explicit null; unknown text fields remain empty strings in JSON and render as unknown in Markdown. They are not silently removed or interpreted as matches. The report schema validates generation time, product identity, stream count, and unique stream keys before serialization.

GitHub Actions injects GITHUB_SHA into SourceRevisionId; the .NET informational version therefore carries the build commit for release and CI artifacts. Local builds without source revision metadata report the commit as unknown rather than inventing one.

Evidence report comparison

The Subscriber Compare action accepts a baseline and candidate arsvin.sv-subscriber-evidence/v1 JSON report and writes a paired comparison bundle:

Comparison uses the full stable stream key first. Unmatched streams are then paired through a logical identity made from APPID, destination MAC, VLAN, svID, and dataset reference. Source MAC is deliberately excluded from that fallback identity so publisher/NIC failover is reported as a source change rather than a false removed-plus-added stream.

The comparison classifies:

Changes are assigned Info, Warning, or Error severity. Removed streams, health transitions to BAD/ERROR, new out-of-order or payload failures, blocking configuration errors, profile conflicts, and dataset-signature changes are treated as high-signal regressions. Measured-rate changes within the one-percent comparison tolerance do not create false warnings.

Current integration boundary

SvStreamObservationManager and Subscriber now:

Next integration

  1. Add profile-specific definitions only after source review and deterministic evidence.
  2. Accumulate real comparison history before defining organization-specific pass/fail policy or CI blocking thresholds.
GPL-3.0-or-later community documentation. Commercial terms require a separate agreement.Review this page on GitHub →