Skip to content

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

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

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.

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