Skip to content

R1A: canonical Signal Catalog → Dataset Signals → bound static RCB - #136

Closed
masarray wants to merge 18 commits into
fix/workbench-browser-recovery-20260927from
feat/browser-dataset-signals-r1a
Closed

masarray wants to merge 18 commits into
fix/workbench-browser-recovery-20260927from
feat/browser-dataset-signals-r1a

Conversation

@masarray

@masarray masarray commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Stacked on recovery PR #127, tracked by milestone #129. Do not merge directly into main until R0/R0.1 is accepted and the stack has been rebased/retargeted.

This implements an operator-visible, read-only path after live MMS discovery:

  • One-time per discovered model Signal Catalog offers Dataset Signals (ordered static members from the canonical engineering model) or Browse Data Model. A toolbar button can reopen it.
  • A DataSet view provides Inspect bound RCB…. C++ selectStaticRcbForDataSet() matches canonical references with the existing IEC 61850 DataSet reference codec, rejects unknown/empty/dynamic datasets, and selects an RCB only after verifying its static binding. It does not issue MMS writes, enable an RCB, request GI, or start polling.
  • No matching static RCB → visible fail-closed message rather than silently selecting an unrelated RCB.
  • Existing report workspace QA now checks positive and invalid-index pivot before the GI test, plus source contracts for the UI.
  • Discovery/Open SCL still use the same canonical Browser/Report controllers. This is R1A, not a claim of full R1 parity or real-device acceptance.

Acceptance: exact-head Qt/C++/Release Hardening green, DATASET_SIGNALS_STATIC_PIVOT_PASS in report QA, no regression in rendered 1024px toolbar/multi-IED checks. Windows device acceptance remains a separate gate.

Rendered behavior extension (2026-09-28)

  • Extend --qa-browser-routing with one canonical static DataSet and an RCB bound to it, exercising the real SCL projection.
  • Render at 1024px, open Dataset Signals from the offline SCL model, verify ordered members and select the exact static RCB without enabling/GI.
  • Re-publish the same fixture through publishLiveDiscovery, assert that the active IED's Signal Catalog popup becomes visible and Dataset Signals remains navigable.
  • A background IED cannot steal modal focus; test and gate the active-tab condition.
  • Log BROWSER_SIGNAL_CATALOG_PASS only if rendered and model conditions all hold. No protocol/network behavior changed.

This new test is under exact-head CI and is not accepted until it passes, including Windows packaging.

Copy link
Copy Markdown
Owner Author

R1A delivered to stacked branch (head cb3a0520)

  • Signal Catalog is offered after completed live discovery, once per model identity/fingerprint, only when the associated IED tab is active; if discovery completes in a hidden tab, the offer waits until that tab becomes visible. The same catalog is manually available for Open SCL.
  • Dataset Signals uses ordered, canonical static membership. Read-only Inspect bound RCB… uses selectStaticRcbForDataSet() and the existing parsed reference comparator. It rejects unavailable directories, deletable/owned dynamic or empty datasets, and never rewrites DatSet, enables reporting, requests GI, or polls MMS.
  • Golden report QA checks positive selection plus invalid-index failure without disturbing selected RCB before normal GI subscription; source contract checks catalog and per-slot modal ownership.
  • R0.1 (3a3ceef9) is green across Qt/C++/Release Hardening, including Windows staging/installed release. The new stacked head's CI is pending. Do not merge R1A or label full R1 complete without exact-head testing and real IED acceptance.

Copy link
Copy Markdown
Owner Author

R1A rendered gate and recovered offline model authority

CI at 4887b3a2 caught a real failure: the SCL-backed report inventory omitted its canonical DataSet binding before a live RCB probe. A source-only test had missed it; the new rendered --qa-browser-routing failed offline_dataset_signals_route.
Fix in 260567f: project the existing canonical SCL DataSet reference into the offline RCB UI only when it matches a known non-deletable DataSet with members. Mark bindingSource=CanonicalEngineeringContext, preserve probeOk=false and never write DatSet or pretend a live probe succeeded.
New Qt test verifies offline SCL → ordered Dataset Signals → exact static RCB selection, then republishes the canonical model as live discovery, requires the real Signal Catalog popup to open, and checks the DataSet path again. The successful Linux rendered test logged BROWSER_SIGNAL_CATALOG_PASS ... no_write=true no_gi=true on d8e81f3c.
Additional active-tab safety: switching away closes the popup, leaving the model/session intact; added rendered regression for this behavior in current head 1d3899e5. Latest exact-head CI is still running. No change to MMS wire behavior or static report subscription runtime.
R1A is not final R1. Real AA1E1F06R4 evidence and R1B report-only convergence remain outstanding.

Copy link
Copy Markdown
Owner Author

2026-10-23 Stage→Main cleanup — stacked R1A source superseded (unmerged)

Exact GitHub ancestry verified: #136 HEAD 1d3899e5266a588a2602a81c0ffe06f148f4e467 is a true ancestor of OPEN Draft #137 HEAD b47ac165f4ae9a3927cb81641cefc88df3e477dc (GitHub compare reports ahead=27, behind=0). The successor contains every commit from this source; this is much stronger than mere similar visual behavior.

Replacement integration/review owner: #137 adds the missing exact canonical Static Dataset → live-probed bound RCB route preservation. The combined R1A+R1B stack remains UNMERGED. Open SCL/Discovery, canonical ordered static Dataset Signals, FC/RCB binding, no implicit GI/enable/write, cross-IED isolation remain covered by open parent milestone #129 and staged source #137. Diverged PR #130 is independent and is NOT closed.

Important stack topology: #137 base is still the feature branch sourced from this PR. Closing the pull request changes no branch, no code, no base, no main commit; source SHA remains recoverable. Future reviewers must validate the ENTIRE inherited R1A+R1B stack against current Workbench main, and must not merge #137 alone into its old base and call that integration to main.

Unpassed acceptance: full exact-head Qt/C++/Release Hardening/Windows installer, 1024px+desktop rendered screenshots, real AA1E1F06R4 Open SCL + Discover, exact static Dataset/RCB enable/readback/GI and reports; #128 and #129 remain OPEN. No field acceptance or release claimed.

Decision: close #136 unmerged as redundant stacked review entry, consolidating source tracking under #137/#129. Preserve original source branch and history.

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