Skip to content

Static DataSet report-only: exact membership + schema-safe report projection - #255

Merged
masarray merged 51 commits into
mainfrom
fix/static-dataset-report-projection-parity
Sep 5, 2026
Merged

Static DataSet report-only: exact membership + schema-safe report projection#255
masarray merged 51 commits into
mainfrom
fix/static-dataset-report-projection-parity

Conversation

@masarray

@masarray masarray commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Direction lock

This PR intentionally continues the Static DataSet contract established at fa16fa98a3bd36e9c7a68910ad84e53bc9e8bbfc and carried into current main:

  • Static DataSet is the source of truth
  • configured static BRCB/URCB + GI are the acquisition path
  • cyclic MMS process polling stays disabled
  • dynamic DataSet writes stay disabled
  • unresolved report projection remains explicit; it must not silently fall back to MMS

PR #253 was closed after physical bench evidence showed that re-enabling bounded MMS fallback regressed this contract.

P0 — exact Static DataSet membership authority

The AA1E1F06R4 bench report showed 58 static DataSet members but 123 selected signal rows / 69 runtime points. The old selection rule accepted every runtime alias carrying a DataSetReference, inflating the plan with cVal / instCVal and structured aliases.

This PR now:

  • obtains ARIEC mandatory DataSet descriptors from the live/design model
  • matches literal (DataSetReference, DisplayReference) identity only
  • chooses exactly one presentation/runtime row per static membership
  • prefers ARIEC resolved-primary rows when available
  • uses no prefix/fuzzy membership matching

P1 — schema-safe report projection without MMS fallback

Physical evidence also showed ARIEC already expanding I_MHAI1.ThdA and V_MHAI1.ThdPPV into exact semantic scalar descendants. ARSAS previously vetoed these families through the legacy exact-MMS rule.

This PR adds StaticDataSetReportProjectionAccumulator and wires it into the strict report-only runtime:

  • static report-covered THD / DmdWh members are no longer rejected merely because the family historically required MMS reads
  • semantic descendants are joined only when the authoritative live/SCL schema proves every exact leaf identity
  • three-phase THD parents are reconstructed from the exact schema-named A/B/C or AB/BC/CA leaves
  • demand-energy parents use the schema-selected canonical magnitude leaf
  • instCVal / sibling values cannot replace the canonical cVal path unless independently selected
  • malformed, ambiguous, or incomplete projection fails closed and remains report-pending
  • ARIEC planner fallback candidates remain diagnostic only and are not scheduled as MMS process polling
  • dynamic plans are filtered out of Static DataSet mode
  • acquisition labels are explicitly Static DataSet: StaticBrcb / StaticUrcb (or the corresponding engine acquisition kind)

The legacy conservative MMS-authority rule remains intact for Manual/Hybrid mode.

P2 — preserve report-native quality + IED timestamp

The second AA1E1F06R4 physical test proved the report already carries q=questionable and the IED timestamp, while semantic value rows could still show Pending / q not supplied and -.

The accumulator now keeps report companion metadata session-locally and joins it to later semantic scalar value leaves by exact IEC object scope:

  • only q/t actually supplied by the report is preserved
  • no default good is invented
  • no MMS read is issued to recover q/t
  • THD child and reconstructed parent rows can inherit the relay-native questionable quality and IED timestamp when q/t precede the semantic value projection
  • reset clears the metadata cache together with aggregate leaf state

ARIEC engine PR #111, pinned by this branch, additionally orders schema-proven q/t companions before semantic scalar values so this report-only join is deterministic.

P3 — TotPF exact semantic schema authority

TotPF remained Unknown / report pending even though IEDScout reads it. The root cause is in the engine projection order: the generic structured-value heuristic can classify a two-float structure as instMag/mag before exact SCL semantic projection is attempted.

ARSAS is now pinned to ARIEC PR #111 / commit 52c19088e215f2dc482db6550367beb1dcb216bb on the exact previous b9ee5fc engine lineage. That engine change:

  • attempts exact Static DataSet + SCL/live semantic schema first for every structured report member
  • publishes exact leaves such as TotPF.instMag.f / TotPF.mag.f
  • removes heuristic aliases under a parent when exact semantic expansion succeeds
  • preserves the generic projector as fail-closed fallback when semantic schema cannot prove a unique mapping
  • adds a relay-specific PPRE_MMXU1.TotPF regression

This does not add polling or dynamic DataSet mutation.

P4 — IP editing responsiveness

The editable IP ComboBox previously combined WPF text search with UpdateSourceTrigger=PropertyChanged, causing binding/UI work on every character typed. The wizard now:

  • disables ComboBox text-search while editing the numeric endpoint
  • commits the IP binding on LostFocus instead of every keystroke
  • still performs actual network connect/discovery only when the user presses Connect & Discover

A source regression prevents the per-keystroke IP binding from returning.

Regression / acceptance guards

Regression coverage verifies exact membership cardinality, THD semantic reconstruction, canonical cVal preference, DmdWh projection, exact-child preservation, report q/t carry-forward, responsive IP editing, and the no-MMS-fallback runtime contract. docs/static-dataset-report-only-contract.md records the physical acceptance boundary so later readability work cannot silently regress the acquisition architecture.

Expected physical result

On the same CID/IED:

  1. Acquisition contains no MMS polling rows in Static DataSet mode.
  2. Configured BRCB/URCB + GI supplies the initial image for schema-safe reportable members.
  3. ThdA / ThdPPV value rows show report-native questionable quality and IED timestamp instead of Pending q/t.
  4. TotPF resolves through exact report semantic leaves rather than remaining Unknown.
  5. Editing the IP address no longer causes heavy UI freezing.
  6. Anything genuinely unresolved stays explicit Pending/unavailable instead of switching acquisition method.

Keep this PR draft until physical relay validation passes.

@masarray
masarray force-pushed the fix/static-dataset-report-projection-parity branch from 9d11b8e to e82f21c Compare September 4, 2026 09:46
@masarray masarray changed the title Static DataSet report-only: exact membership authority before projection fixes Static DataSet report-only: exact membership + schema-safe report projection Sep 4, 2026
masarray and others added 23 commits September 4, 2026 23:52
@masarray
masarray marked this pull request as ready for review September 5, 2026 03:37
@masarray
masarray merged commit c8ee521 into main Sep 5, 2026
4 checks passed
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