Skip to content

fix: stop UI policy deleting static DataSet inventory - #187

Merged
masarray merged 19 commits into
mainfrom
fix/dataset-authority-ui-prune
Aug 15, 2026
Merged

fix: stop UI policy deleting static DataSet inventory#187
masarray merged 19 commits into
mainfrom
fix/dataset-authority-ui-prune

Conversation

@masarray

Copy link
Copy Markdown
Owner

Real field evidence

ARSAS 916a37e3d3c3364bc38a34e4ed2aaaa70a11cac6 with ARIEC61850 761fa0df9ca84fbe15352d2670f03fddbe8784ba still showed 2 static DataSets / 58 members / 58 semantic descriptors but only 5/58 represented. The diagnostic repeatedly logged ARIEC DataSet authority restored 53 mandatory primary signal(s) while the authoritative device inventory returned to 110 signals and completeness returned to 5/58.

Root cause

SasOperationalUiPolicy registered a global DataGrid.Loaded handler, resolved the underlying SignalDefinition source collection, and destructively removed rows rejected by SasOperationalSignalPolicy.IsVisible using IList.RemoveAt.

That operator policy intentionally accepts exact runtime value leaves. Siemens static FCDA/FCD members in this CID are object-level references with no daName, so mandatory DataSet rows such as AA1C1F13R4ADD/GGIO6.CBOpnd were correctly restored by ARIEC and then deleted from device.Signals by UI presentation policy. Collection-change subscription could prune them again after each recovery, explaining repeated +53 restore messages in the field log.

Fix

  • UI policy no longer mutates the SignalDefinition source collection.
  • SAS pruning is now presentation-only through ICollectionView.Filter.
  • Existing grid/window filters are composed rather than replaced.
  • Any signal with a non-empty static DataSetReference remains presentation-visible even when the object-level FCD is not an exact runtime leaf.
  • No .stVal or other leaf is fabricated.

Regression coverage

  • object-level CBOpnd with static DataSet membership is visible while the normal leaf policy still rejects it independently;
  • the same object without DataSet membership remains filtered normally;
  • source contract forbids RemoveAt, SchedulePrune, and destructive prune helpers in SasOperationalUiPolicy;
  • a Siemens-like cross-LD SCL fixture passes mapper + presentation decision with DataSet completeness unchanged.

Expected next field result

After clean build and fresh CID import:

  • Static DataSets: 2
  • Static members: 58
  • Semantic descriptors: 58
  • Signal Selection: 58/58
  • Analog: 22/22
  • Digital: 36/36
  • Missing static member: 0

Physical field validation remains required; CI cannot substitute for the real Siemens CID/UI lifecycle.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@masarray
masarray merged commit 2f2af7d into main Aug 15, 2026
2 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