Skip to content

P3: wire trusted SCL-assisted connect into Workbench product path #88

Open

Description

@masarray

Goal

Make the already-implemented trusted-SCL MMS path a real Workbench product behavior, not only a core API.

P3 starts after P2's MmsTcpLiveDiscoverySession::synchronize_scl(...) contract. The application must deterministically choose the online model source and surface failures without silently changing model identity.

Product contract

Trusted SCL loaded

  • A successfully loaded SCL/CID arms MmsClientController::trustedSclPath.
  • Connect parses that exact engineering source, associates to the requested endpoint, and invokes synchronize_scl(...).
  • Workbench tree topology/types come from the trusted SCL projection.
  • Initial successful FC-root values are applied to their exact SCL leaves.
  • Missing/failed FC roots do not delete SCL topology and do not shift values onto neighbouring leaves.
  • The same MMS association remains usable by normal Read/Write/report workflows after the initial snapshot.
  • Full NamedVariable/GVAA/DataSet discovery must not run silently on this path.

No trusted SCL loaded

  • Connect uses the existing full live-discovery path.
  • Clearing the trusted SCL source is the explicit user-controlled fallback from SCL-assisted mode to live discovery.

Invalid trusted SCL

  • Fail closed and expose the error.
  • Do not silently fall back to a different online model while an engineering source is explicitly armed.

Current implementation

Already present on PR #82 before this issue was opened:

  • MmsClientController has trustedSclPath / trustedSclAvailable.
  • trusted path invokes session->synchronize_scl(...).
  • MmsSclClientProjection.hpp builds the Workbench model from SCL and initial snapshot evidence.
  • Main.qml arms the path only after sclWorkspace.loaded succeeds.
  • model source is recorded as Trusted SCL + initial snapshot versus Live MMS discovery.

P3 hardening added in this work:

  • dedicated runtime QA ied_mms_scl_assisted_workbench_qa.cpp;
  • standalone exact-product build gate under apps/ied_simulator/tests/scl_assisted_workbench;
  • dedicated SCL-Assisted Workbench CI.

Acceptance gates

  • Dedicated P3 Workbench QA passes using tests/fixtures/scl/client-workbench.scd.
  • It proves initial SP value mapping, preservation of an unavailable SCL-declared ST root, persistent association, explicit clear-SCL fallback, and invalid-SCL fail-closed behavior.
  • Existing IED Simulator Qt, SCL-Assisted Connect CI, C++ CI and Release Hardening stay green.
  • Retained Embedded Profile regression must also be green before P3 is considered internally complete.
  • PR feat: lightweight IEC 61850 engineering simulator workspace #82 stays OPEN + DRAFT.
  • External vendor external IEC 61850 client claims remain separately gated by real-client evidence; this issue does not close that gate.

Activity

  1. masarray commented on Sep 14, 2026

    @masarray
    OwnerAuthor

    P3 implementation checkpoint

    Current implementation head: cec9ba9eea184482f6a7a8143868c53fa611d126.

    P3 product behavior now has an explicit regression gate:

    • ebca7a66... — adds ied_mms_scl_assisted_workbench_qa.cpp covering trusted-SCL selection, initial snapshot projection, unavailable FC preservation, persistent association, explicit clear-SCL fallback, and invalid-SCL fail-closed behavior.
    • 3a0ec060... — standalone product-graph build for the P3 QA.
    • 392fecd9... — dedicated SCL-Assisted Workbench CI.

    Retained Embedded Profile failure was traced independently of P3. The registered RCB-root smoke used BRCB OptFlds={0x5C,0x80} while the embedded BRCB runtime requires the EntryID option bit for retention/replay. cec9ba9e... corrects only that fixture to {0x5D,0x80}; no dispatcher/BRCB runtime behavior was changed.

    Exact-head CI is currently queued. Keep this issue OPEN until the P3 Workbench gate, Embedded Profile, IED Simulator Qt and Release Hardening complete successfully. External vendor external IEC 61850 client acceptance remains separate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions