Skip to content

P0 Workbench Reports: verified SCL/MMS DO→DA hierarchy and semantic process values #226

Open

Description

@masarray

MANDATORY P0 PRECONDITION — WHOLE WORKBENCH SSOT: Master handoff. This issue's typed Report tree is one downstream slice, not completion of canonical live value/acquisition/provenance convergence across Data Model, DataSets, Reports, per-IED Global Data and All-IED. First fix source-qualified Read + accepted Report ingress and one consistent sample over all views; do not continue GUI-only changes in isolation. As of 2026-10-17, PR #230 is unmerged and its exact-head Browser convergence gate failed.

Evidence / problem

Paired field screenshots (17 Oct 2026) show aplikasi pembanding's Report Data in a navigable DO→DA→typed leaf tree (stVal, q, t, origin/ctlNum etc.) with readable status/quality/time values, while ARStack displays opaque aggregate wire arrays and long full FCDA paths. Existing PR #222 removes unbounded aggregate dumps; #225 moves selected detail inline, but positional Field N values are not full semantic parity.

The supplied two screenshots use different selected indexed RCBs (ARStack Rpt_ind02 versus aplikasi pembanding Rpt_ind03); they demonstrate UX deficiencies but cannot prove wire/value parity until tests select the same IED, RCB, DataSet, report instance and timestamp/state.

Required architecture (not a parallel parser)

  • Reuse canonical IedEngineeringContextController.modelSnapshot() and MmsLiveTreeModel typed node identities and FCDA/DataSet matcher, with MmsReportSubscriptionRuntime native decoded MmsReportValue. Do not add a new receive association, per-row network read, fabricated SCL tree, QML IEC decoder, or guessed q/t/unit/value.
  • Map an incoming report member to one validated DataSet ordinal, full immutable IEC/MMS reference, functional constraint, and matching authoritative type schema. Confirm structure cardinality/nested layout and source generation before assigning wire child indexes semantic labels. If ambiguity exists, display positional fallback explicitly; do not infer stVal from position.
  • Render actual enum names (e.g. double-point state), validated Quality bits/validity, UTC/TimeQuality with full details, and units/multiplier only where SCL/IED typed evidence exists; preserve unread/error/truncated states and security context. Never silently turn unknown values into false/good/zero.
  • Lazy expand DO/DA children beneath a selected member. Use display-friendly short references but preserve full references on hover/inspect. Use bounded detail projection and only changed-frame publishing; keep 60k node scalability.
  • Preserve cross-RCB provenance, exact RptID, SqNum/EntryID and inclusion reason; validation/report failure must never be mistaken for a process value.

Acceptance gates

  1. Native C++ type-binding unit cases (exact/nonmatching/ambiguous/stale/offline, multiple FC and vendor ordering, malformed q/t, nested structures, enum, time quality); negative tests must fail closed.
  2. Qt UI smoke and frame history stress showing zero bulk per-tick duplicate projection and reasonable CPU/allocations; bounded detail max.
  3. Screenshots with identical real IED, same RCB (e.g. Rpt_ind03), DataSet, q/t source and report state; compare root row, expanded structure, optional fields, time quality and unit metadata with aplikasi pembanding.
  4. Source-matched Windows installer/portable and field traces. Do not claim physical interoperability from CI/PCAP replay.

Sequencing

After #222 and #225 pass/merge. This is a semantic typed-report milestone, not another toolbar or color-only redesign.

Activity

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