Skip to content

M2.14 BCUGE: restore ARIEC schema binding on isolated Browser MMS reads - #597

Closed
masarray wants to merge 6 commits into
fix/m214-browser-goose-scl-network-fidelity-20261016from
fix/m214-browser-isolated-schema-fidelity-20261016
Closed

masarray wants to merge 6 commits into
fix/m214-browser-goose-scl-network-fidelity-20261016from
fix/m214-browser-isolated-schema-fidelity-20261016

Conversation

@masarray

Copy link
Copy Markdown
Owner

Real BCUGE screenshot: 55/80 SGCB attributes, 25 unavailable during active monitoring

The current Browser switches to an isolated read-only MMS association during live reporting. NativeIec61850Client.ConnectAsync clears _liveModel, and unlike the primary discovery client the isolated reader never populates it. The structured MMS projector (TryProjectWithArIecBinding) needs the exact discovered value/type schema to resolve requested DO/DA leafs. The result is an asymmetry: direct scalar attributes such as NumOfSG / ActSG may succeed while structure-dependent reads can be blocked even when a wire response exists.

Focused fix (no speculative retry)

  • Capture the current live discovery model from the monitoring device on the caller thread before isolated-reader dispatch, never from SCL-only.
  • Bind this model only to the existing ARIEC structure/scalar projection path in the independently connected NativeIec61850Client; no second network discovery, report subscription or control write.
  • Fail closed when model object, projection epoch, association, IP/port, or live/monitor lifecycle changes. Validate at binding and for each read.
  • Keep the existing sequential bounded read and 5s per-target timeout; preserve report ingress as canonical authority.
  • Regression tests cover successful live lease, refusal for SCL-only/offline, model/endpoint/association invalidation and rejection of disconnected-client schema injection.

Expected measurable outcome: more model-bound structured SG/DA leaves may decode during live monitoring, but this is not yet proof that all 25 BCUGE failures are resolved. Field evidence and per-attribute error diagnostics still required.

Stacked on #596. Keep draft; no main merge, pinned engine update, protocol write, automatic polling or release.

Copy link
Copy Markdown
Owner Author

D6 semantic reconciliation — verified live schema lease preserved, close historical carrier unmerged

Disposition A — safe historical supersession, not a source merge: original head 326525c90cec384190abf21eda43510153dfc17d is an exact ancestor of integrated draft RC 817c3910e8223fa2ac531a4426ada5d2d4bbbe50 (+1275/-0; merge base old head). Four of four touched paths verified individually; original branch/head kept recoverable.

Canonical replacement: protected RC #727 / #729 at 817c3910e8223fa2ac531a4426ada5d2d4bbbe50.

Unique delta / source proof: Models/IedBrowserIsolatedReadSchemaLease.cs old and RC exact blob 8ffa03bf40ba7f29db9ebbdc04aeea2c8082dd2b, captures only connected/monitoring verified live model with association, Browser projection epoch, IP+port, exact model reference and offline fence; refuses SCL-only promotion. tests/ARSAS.Tests/M214IsolatedBrowserSchemaLeaseTests.cs old/RC identical blob 26842618182ef5372eef6eea14eb21f981242d09, all 4 original tests retained.

Services/IedBrowserIsolatedReadService.cs old 3b1521c8abcc5ca1d0b6f55f2996964c9ecc9ef1→RC 9d0ad89e99ba1953c354faace8c6f13b529b712b: unchanged capture before thread crossing, lease.IsCurrent(device) before model binding and repeatedly before individual Read, client.BindIsolatedBrowserReadSchema(lease.Model); subsequent RC adds model-bound typed-DO root handling and TryAcceptVerifiedMmsString, a strictly wire-type-verified fallback rather than obsolete arbitrary structure coercion. Services/NativeIec61850Client.cs old 0cff7ebaa10764e025f9b488bae1356e7922f112→RC b74398faf4d206286ab1dcac8b6e5ab414783393: exact connected fresh secondary client only guard !IsConnected || _liveModel is not null || _lastDiscovery is not null still rejects unsafe injection; same _liveModel = verifiedLiveModel schema-only binding. No RCB, Write, subscriber, native command, or duplicate value cache introduced by this historical branch.

Safety: In this closure no code, engine lock, protected RC, published v1.6.42 or main changes. The exact #753 six-file head 410a2fd3c8757f9c9cac46e2df6cb4ce047585b7 now has Windows/native/package + SCL CI successful (Windows, SCL); this does NOT prove live secondary association with a physical IED.

Follow-up: Retain live association/model lease tests and physical multi-client capacity/error tests on the active RC. #615 Control late-flight alias, #606 GOOSE/SGCB parity and #729 physical signoff remain separate. Do not read closure as IED FAT acceptance.

@masarray masarray closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant