Repository navigation
P0 Workbench Reports: verified SCL/MMS DO→DA hierarchy and semantic process values #226
Description
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()andMmsLiveTreeModeltyped node identities and FCDA/DataSet matcher, withMmsReportSubscriptionRuntimenative decodedMmsReportValue. 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
stValfrom 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
- 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.
- Qt UI smoke and frame history stress showing zero bulk per-tick duplicate projection and reasonable CPU/allocations; bounded detail max.
- 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.
- 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