Skip to content

M2.17-B Live Model: reuse verified SCL initial MMS values in per-IED SSOT - #604

Closed
masarray wants to merge 3 commits into
fix/m217-typed-dpc-live-model-presentation-20261016from
fix/m217b-reuse-verified-scl-initial-evidence-20261016
Closed

masarray wants to merge 3 commits into
fix/m217-typed-dpc-live-model-presentation-20261016from
fix/m217b-reuse-verified-scl-initial-evidence-20261016

Conversation

@masarray

Copy link
Copy Markdown
Owner

M2.17-B — safe initial evidence reuse, not a new Live Model

Stacked on draft #603 at b59f4951065db528d657f0f6c7ef680c6c4e01ed. This narrow production slice closes one audited evidence-publication gap: verified SCL-assisted connect already executes bounded ARIEC initial FC reads and retains decoded leaf results in NativeIec61850Client._trustedSclInitialValues, but their values did not enter the consumer's existing IedBrowserLiveValues per-IED ledger. IED Browser showed Not read for those leaves despite an accepted MMS Read.

Patch

  • A stateless, O(schema + bound rows) projection accepts only decoded scalar leaves from the existing successful, verified SCL-assisted initial-read authority. Require exact current LiveDiscoveryModel object, reference (ordinal/case-sensitive), FC, compatible declared BType, live association, unambiguous declaration, value validation and current projection epoch.
  • Publish through the existing LiveValues.PublishForAssociation Read channel. Reuse IedBrowserReadBindingIndex.Apply for existing Explorer signal/point compatibility. Report remains authoritative in active monitoring. No second value ledger, decoder, poller or projection cache.
  • Wire both SCL-assisted fast connect and SCL-assisted smart reconnect after the new association starts; old callback cannot publish after epoch change.
  • Exclude structures, unsupported/ambiguous values, timestamps lacking typed UTC provenance, and fake quality flags. Preserve raw DPS for the already shared schema-gated presentation. No new MMS packets are issued by this patch.

Regression

Six focused tests for Mod/Health/NamPlt/Pos admission, exact type/reference/FC and duplicate guards, canonical-vs-MMS references, Report/Read authority, reconnect fencing, multi-IED/offline isolation, impossible scalar rejection, DPS [01] display, and both connection paths.

Boundaries

This fixes reuse of pre-existing SCL-assisted initial evidence, not full auto-hydration following unrestricted live discovery. Remaining missing Mod/Beh/Health/NamPlt observations require M2.17-C bounded read planning after auditing actual engine discovery snapshots. M2.17-D still needs cross-workspace acceptance. No claim of BCUGE hardware verification.

Validation/promotion gates

Copy link
Copy Markdown
Owner Author

Reconciliation D2 — SCL initial scalar observation SSOT continuity (2026-10-26)

Disposition: B — historical M2.17-B code and tests already preserved in the integrated canonical RC, administrative PR superseded; closure does not merge or qualify RC.

Canonical replacement: draft #727/#729 RC 817c3910e8223fa2ac531a4426ada5d2d4bbbe50. Original head 5a83f4510bf7159c8534e5deb32bf41516ff563e is exact ancestor: GitHub old→RC comparison ahead 1240, behind 0, merge base original HEAD.

Unique delta verified across all 3 changed paths:

  • Services/IedBrowserInitialEvidenceProjection.cs: same blob 511dac32c2b10e6d33c3383c1db7d64ba1adb7f6 in original and RC. One stateless validated projection; no second value cache or network acquisition lane.
  • tests/ARSAS.Tests/IedBrowserInitialEvidenceM217BTests.cs: same blob b66de8475b0908321da86109328740abf5ef426e; originally-added regression suite preserved byte-for-byte.
  • Services/Iec61850MonitorRuntime.cs: evolved from 6fe4e44f38ab40aa7ff6a65b63977d4933c97d12 to RC 0f783af40b2af82a462b9388e3a6d327188cfa9c. Original SclAssisted completion call to PublishTrustedSclInitialEvidence(session) is retained (RC lines ~850-852). Verified method at ~947-960 requires same active DeviceSession, connected client, trusted SCL online authority, non-null model, and reference-equal client.LastLiveModel before it publishes through unchanged projection. RC now also calls the same safe projector on successful reconnect (~3212), preserving association-scoped behavior rather than sourcing SCL guesses.

Safety: This is verified code presence/source-gate semantic preservation, not a claim of wire/FAT acceptance or complete SSOT equivalence across unrelated newer features. Historical branches untouched. No main/source/tag/binary changes, CI rerun, additional MMS I/O, or trial-engine repin. #606 and #615 unique-delta hazards and active #727/#729/#726/#716 remain open.

Follow-up: keep exact initial-value provenance/association checks in canonical RC and targeted SSOT regression tests during future merge. Mainline code promotion/physical validation remain governed by #729 and field issues; do not bypass engine qualification.

@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