Repository navigation
M2E: bounded RCB report member projection and truthful truncation UI - #167
Conversation
Extract one pure typed report-member projection that retains at most 256 visible member strings, 1024 characters per preview, and 96 typed q/t evidence items across the snapshot. Keep original report count and authoritative decoded MMS frames untouched; expose explicit row/text truncation in Browser Reports. Eliminate O(full DataSet size) Qt string conversion per retained report frame; add 300-member native QA with failed value, wrong type, budget exhaustion and small-window cases. No extra MMS reads or polling.
Update Browser convergence source contract after M2E moved q/t decoding out of MmsReportController to BrowserReportMemberProjection. Require decoder call in the bounded helper and reject accidental duplicate inline decoding in the controller. Preflight validated all UI/source contract required tokens on exact branch.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 935146a038
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (member.value) | ||
| displayValue = QString::fromStdString(mms::MmsDataCodec::to_display_string(*member.value)); |
There was a problem hiding this comment.
Bound formatting before materializing the full value
When a retained member contains a large string, byte sequence, array, or structure, to_display_string first materializes the complete recursively formatted std::string, and fromStdString then copies all of it into a QString; the 1,024-character limit is applied only afterward. Because buildSubscriptionUi repeats this for up to 128 retained reports on every 100-ms poll, a history of large valid values can still cause substantial allocation churn and delay report refreshes despite the advertised bound. Use a length-aware formatter that stops appending at the preview limit rather than truncating after full conversion.
AGENTS.md reference: AGENTS.md:L133-L140
Useful? React with 👍 / 👎.
Baseline
Follow-up to merged typed RCB q/t PR #165 (
mainaf3ced5). Native Qt Workbench only.Bottleneck
The Browser showed only first 256 report rows but
buildSubscriptionUiformatted every decoded DataSet value in each retained report frame before QML sliced the list. A large IED could allocate large strings many times during UI refresh. This optimized change bounds formatting, not MMS decoding or report subscription.Implementation
BrowserReportMemberProjection.hppfrom existing report value/typed-evidence projection; no shadow semantic state or new reporting path.valueCountstill records the actual source frame count; the original runtime report stays untouched..slice(0,256).Acceptance
Only scoped
IED Simulator QtCI should run. Native build, QML smoke, Browser convergence, 60k model QA, live MMS data-plane checks pass on exact head. Keep Draft and do not merge on failure. Windows visual/device testing remains a separate acceptance gate; no claim of pixel parity.CI efficiency
One atomic commit, no protocol/firmware edits and no Windows packaging job for this C++/QML-only iteration.