From d560d75407bb7541544020ca25c7042a95226cf4 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 07:15:59 +0700 Subject: [PATCH 1/3] fix(reports): qualify GUI GI messaging with actual wire evidence --- apps/ied_simulator/src/MmsReportController.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ied_simulator/src/MmsReportController.cpp b/apps/ied_simulator/src/MmsReportController.cpp index bd4d78a3a..7fbbef210 100644 --- a/apps/ied_simulator/src/MmsReportController.cpp +++ b/apps/ied_simulator/src/MmsReportController.cpp @@ -1615,7 +1615,7 @@ bool MmsReportController::enableSelectedAuthored( "Authored RCB restored to canonical static DataSet; configuration verified and enabled.") : (requestGeneralInterrogation ? QStringLiteral( - "Authored RCB configuration verified; enabled; GI requested.") + "Authored RCB enabled; GI requested (inspect GI write outcome and received reports).") : QStringLiteral( "Authored RCB configuration verified and enabled."))); emit self->inventoryChanged(); @@ -1718,7 +1718,7 @@ bool MmsReportController::enableSelected(const bool requestGeneralInterrogation) self->reportDecodeFailureCount_ = ui.decodeFailureCount; self->state_ = ui.cleanupRequired ? State::cleanup_required : State::active; self->appendDiagnostic(requestGeneralInterrogation - ? QStringLiteral("RCB enabled; GI requested explicitly.") + ? QStringLiteral("RCB enabled; GI requested (inspect GI write outcome; report not yet proven).") : QStringLiteral("RCB enabled without GI.")); emit self->reportsChanged(); emit self->stateChanged(); From c4ae464352879d482e5761439437b6250d1677b4 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 07:16:03 +0700 Subject: [PATCH 2/3] fix(reports): bind member selection identity to exact active RCB reference --- apps/ied_simulator/qml/BrowserReportPane.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/ied_simulator/qml/BrowserReportPane.qml b/apps/ied_simulator/qml/BrowserReportPane.qml index 23817d84b..136d9dff1 100644 --- a/apps/ied_simulator/qml/BrowserReportPane.qml +++ b/apps/ied_simulator/qml/BrowserReportPane.qml @@ -29,9 +29,11 @@ Rectangle { // Preserve selection through repeat snapshots of the same report frame; // reset only when the actual ReportID/sequence/entry identity changes. readonly property string latestReportIdentity: !hasLastReport ? "" : [ - latestReport.reportId || "", latestReport.sequence || "", + latestReport.rcbReference || "", latestReport.reportId || "", latestReport.sequence || "", latestReport.subSequence || "", latestReport.entryId || "" ].join("|") + // A different indexed RCB can legitimately emit the same RptID/SqNum. + // Reset member selection when provenance changes, not only wire sequence. onLatestReportIdentityChanged: selectedReportMemberIndex = -1 function selectedReportMemberEvidence() { if (!hasLastReport || selectedReportMemberIndex < 0 || From 36381030a9eb93edf9587f3cdfd0d297be0ffc3e Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Sat, 17 Oct 2026 07:16:10 +0700 Subject: [PATCH 3/3] test(browser): guard member selection reset on RCB identity change --- apps/ied_simulator/test_browser_convergence.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/ied_simulator/test_browser_convergence.py b/apps/ied_simulator/test_browser_convergence.py index d94a17c28..a32613beb 100644 --- a/apps/ied_simulator/test_browser_convergence.py +++ b/apps/ied_simulator/test_browser_convergence.py @@ -249,6 +249,7 @@ 'selectedReportMemberEvidence()', 'root.selectedReportMemberIndex = dataRow.index', 'onLatestReportIdentityChanged: selectedReportMemberIndex = -1', + 'latestReport.rcbReference || ""', 'BrowserEngineeringEvidence {', 'root.latestReport.valuesTruncated === true', 'root.latestReport.valueTextTruncated === true',