Skip to content

Milestone R1 — Open SCL and Discovery converge into verified static reporting #129

Open

Description

@masarray

Purpose

Deliver one canonical IED engineering model and one static report-only workflow for both Open SCL and Live Discovery after R0 (#128) is accepted. This milestone must be operator-usable rather than a cosmetic ARStack screen.

Acceptance — model and lifecycle

  • Open SCL → select IED (for multi-IED files) → canonical LD/LN/DO/DA browser, offline values/evidence.
  • Discover IED → construct the same canonical Browser model, with IED identity, ordered static DataSets and RCB inventory.
  • Switching between independent IED tabs never changes another association or selected context.
  • Save discovered SCL → disconnect → re-open → deterministic semantic round trip, with unresolved identity/type/membership failing closed.
  • Large-model browse and incremental discovery remain responsive without unbounded UI work.

Acceptance — static reporting authority

  • Post-discovery Signal Catalog explicitly offers Dataset Signals and an alternative browse/select route.
  • Both Open SCL and Discovery can select Static Dataset and converge into the identical static reporting controller/path.
  • Respect exact ordered IED DataSet membership and FC/MMS identity; do not silently rebind the RCB DataSet.
  • Correct BRCB/URCB selection, enable/read-back and explicit GI when supported; surface reasons for failures.
  • Static reporting uses report notifications only; cyclic MMS fallback disabled, no mixed static/dynamic authority.
  • Dynamic DataSet authoring remains explicitly separate, owned-only and guarded.

Evidence / exit gate

  • Offline/synthetic behavioral QA for both entry paths and selected static dataset, plus negative cases.
  • Real IED AA1E1F06R4 compare discovered model, saved SCL, static member order, RCB mapping and observed value/quality/timestamp against trusted evidence.
  • CI Qt/C++/Release Hardening success on exact commit; Windows portable and installer for manual GUI acceptance.
  • Screenshots/diagnostics demonstrate the full flow; no 'done' based only on static source token tests.

Baseline guard

Work from the last verified main/discovery build, not a reverted or older branch. Retain static report-only and no polling fallback.

R1 implementation sequence

R1A — Signal Catalog and read-only static mapping, stacked PR #136

  • Live-discovery Signal Catalog exposes Dataset Signals or Browse Data Model; no implicit RCB enable/GI.
  • Same canonical Dataset Signals view can be reopened for an Open SCL model.
  • Inspect bound RCB uses canonical DataSet reference matching and refuses absent/dynamic/empty membership; no RCB rewrite.
  • Exact-head Qt and C++ behavioral QA, including DATASET_SIGNALS_STATIC_PIVOT_PASS (PR R1A: canonical Signal Catalog → Dataset Signals → bound static RCB #136 head 1d3899e5).
  • Rendered dialog and selected static Dataset Signals acceptance with offline/fixture evidence (Linux offscreen, active-tab isolation).

R1B — reporting convergence (not implemented yet)

  • From either entry path, explicit Static Dataset selection flows through the same report-only controller; never mix cyclic MMS polling.
  • BRCB/URCB/RCB ownership/GI and read-back diagnostics verified against AA1E1F06R4.

Do not mark full R1 done from R1A source changes or CI green alone.

R1A verified fixture evidence

  • Linux rendered release soak at 1d3899e5: BROWSER_SIGNAL_CATALOG_PASS discovery_modal=visible offline_dataset=visible canonical_members=ordered static_rcb=matched no_write=true no_gi=true background_tab=isolated.
  • The new rendered QA originally failed on missing offline canonical RCB-to-DataSet projection, now preserved with bindingSource=CanonicalEngineeringContext while probeOk=false stays honest. Actual runtime wire operations are unchanged.
  • Windows installer and full exact-head checks remain in progress; no real AA1E1F06R4 evidence yet. R1B static report-only convergence is still open.

R1B — route persistence and live report attach, stacked PR #137

  • Persist the exact canonical static DataSet chosen in Dataset Signals.
  • Re-attach Reports by live probing and restore only an exact bound RCB whose probe succeeds; no row-0 fallback.
  • Fail closed when the chosen static DataSet has no verified live RCB binding.
  • Manual DataSet/RCB selection clears the armed route so operator intent overrides automation.
  • UI exposes Static Reporting… and a compact STATIC · <DataSet> route indicator; Enable + GI remains explicit.
  • Exact-head behavioral CI must emit STATIC_REPORT_ROUTE_RESTORE_PASS and all Qt/C++/Release Hardening jobs must pass.

R1B intentionally does not add polling fallback, DatSet writes, automatic RCB enable or automatic GI.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions