Skip to content

M2D-2: bounded canonical Quality/TimeQuality evidence for RCB reports - #165

Merged
masarray merged 2 commits into
mainfrom
ux/workbench-rcb-typed-evidence-m2d2
Oct 14, 2026
Merged

masarray merged 2 commits into
mainfrom
ux/workbench-rcb-typed-evidence-m2d2

Conversation

@masarray

Copy link
Copy Markdown
Owner

Baseline

Continue from merged native Workbench M2D-1 PR #163 (main e749617). Reuse MmsEngineeringEvidence.hpp and BrowserEngineeringEvidence.qml added in M2D-1. No web UI and no MMS engine, ESP32/SMV/PTP or reporting subscription changes.

Implementation

  • Decode q/t only from successful MmsReportValue typed values already retained by existing RCB report runtime (buildSubscriptionUi), not from display strings, hex guesses, polling or duplicate subscriptions.
  • Preserve Report ID and exact received member index in each displayed report map; attach typed evidence entries only when decoder returns verified data.
  • Bound additional retained metadata to 96 typed evidence items per snapshot, and only the first 256 displayed report members; mark omitted details if budget exhausted. Existing bounded stream/frame history remains unchanged.
  • Browser Reports: click received member to display the same canonical Quality/TimeQuality inspector used by Data Model/DataSets. Selection resets on newer report; no offline values fabricated.
  • Accept IEC path leaf LN.DO.q/t as well as MMS $FC$DO$q/t in the shared typed decoder. Extend large-model QA and QML report contract. No second decoder or semantic cache.

Acceptance

  • Exact-head native Qt Build, QML smoke, Browser convergence, large-model regression and SCL-Assisted Workbench checks pass.
  • Report member alignment must remain stable when failed values, missing data references or non-q/t values occur.
  • No new background MMS traffic. No new firmware/installer release until regression is green.
  • Pixel-level visual parity / device interoperability still require Windows and real IED validation.

CI discipline

Single atomic commit; only scoped Workbench CI. Keep Draft until acceptance.

Project Quality/UTC-TimeQuality evidence directly from successful MmsReportValue payloads via existing canonical decoder; preserve report DataSet member index and ReportID provenance. Cap typed evidence at 96 per report snapshot without a second semantic cache. Inspect a selected received member in Browser Reports with the same reusable dense q/t panel, while offline values remain unknown. Validate IEC dotted references and add report source contracts.
…me selection

Correct typed decoder leaf extraction from both MMS and IEC reference paths (no duplicated/truncated header source), preserve selected report-member inspection through repeated snapshots of the same frame, precisely flag omitted q/t details, and fall back to canonical directory MMS references. Extend Browser source integrity contract; exact Git blob contents verified before push.
@masarray
masarray marked this pull request as ready for review October 14, 2026 21:20
@masarray
masarray merged commit af3ced5 into main Oct 14, 2026
1 check passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T21:23:49.794985Z c7a6841 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c7a6841b65

ℹ️ 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".

Comment on lines +24 to +28
readonly property string latestReportIdentity: !hasLastReport ? "" : [
latestReport.reportId || "", latestReport.sequence || "",
latestReport.subSequence || "", latestReport.entryId || ""
].join("|")
onLatestReportIdentityChanged: selectedReportMemberIndex = -1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reset selection for reports without optional identifiers

When an RCB omits sequence-number, segmentation, and entry-id from OptFlds, successive reports all produce the same identity (RptID|—|—|), so this handler never resets the selected row. The highlight then remains while the evidence silently changes to the same row in a newer frame; use a stable per-frame occurrence identifier rather than only optional wire fields.

AGENTS.md reference: AGENTS.md:L74-L86

Useful? React with 👍 / 👎.

Comment on lines +490 to +494
QString memberRef = QString::fromStdString(item.data_reference);
if (memberRef.isEmpty() && item.member)
memberRef = QString::fromStdString(item.member->user_reference);
if (memberRef.isEmpty() && item.member)
memberRef = QString::fromStdString(item.member->mms_reference);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Cross-check DataRef before using it as the semantic type

When a report supplies a DataReference that disagrees with the directory member already mapped by inclusion index, this gives the untrusted wire string priority. A malformed endpoint can therefore make an unrelated 13-bit BIT STRING appear as IEC Quality merely by ending DataRef in .q; validate the reference against item.member or fail closed on a mismatch before decoding engineering evidence.

AGENTS.md reference: AGENTS.md:L55-L66

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant