Skip to content

fix: enforce pinned ARIEC engine for static DataSet selection - #185

Merged
masarray merged 10 commits into
mainfrom
fix/enforce-ariec-pin-and-dataset-selection
Aug 15, 2026
Merged

masarray merged 10 commits into
mainfrom
fix/enforce-ariec-pin-and-dataset-selection

Conversation

@masarray

@masarray masarray commented Aug 15, 2026 •

Copy link
Copy Markdown
Owner

Field evidence

A real Siemens CID run on ARSAS 1d06cf3849fcec81eef86444f6a40a4ecc83294c still reported 5/58 static DataSet members represented. The same diagnostic proved the application was loading engine 4fc3119be2bb97e0ea3a8d31fb990e6a1a089e60, even though ARSAS main pins 761fa0df9ca84fbe15352d2670f03fddbe8784ba from ARIEC PR #78.

The field report also showed the first-run SingleOrDefault() exception still occurs, and source audit found Signal Selection's constructor still rewrote every existing DisplayReference from the runtime ObjectReference.

Root causes

  1. Local ARSAS builds only referenced the sibling ../ARIEC61850 project path. The lock JSON was copied to output but never enforced by MSBuild. CI checks out the exact lock SHA, so CI was green while a local build could silently compile an older engine. This explains the old descriptor-centric 68 semantic descriptors result.
  2. Signal Selection's constructor unconditionally replaced protocol/static display identity with a runtime reference before the DataSet-authority lifecycle repaired it.
  3. The first-run launcher asserted that the hero visual tree contained exactly one Border; the P2 visual tint is also a Border, so decoration could trigger Sequence contains more than one element.

Changes

  • fail build before project-reference resolution when ARIEC Git HEAD differs from engines/ARIEC61850.lock.json
  • emit expected SHA, actual SHA and engine checkout path in the build error
  • add a regression that compares the loaded ARIEC assembly informational version to the ARSAS lock
  • add an end-to-end Siemens-like SCL regression covering 2 static DataSets / 58 cross-LD FCD members through SCL projection, ARIEC mandatory inventory, ARSAS Signal Selection inventory and completeness diagnostics
  • preserve non-empty SignalDefinition.DisplayReference in the Signal Selection constructor; runtime ObjectReference is now only a fallback when no display identity exists
  • make first-run launcher discovery select the operational Border by content contract while explicitly ignoring P2IndustrialHeroTint, eliminating SingleOrDefault() from that path
  • strengthen source regressions for both identity preservation and launcher discovery

Expected field gate

A valid build of this ARSAS revision must report engine 1.0.0+761fa0df9ca84fbe15352d2670f03fddbe8784ba (or the exact SHA subsequently reviewed into the lock). A stale engine checkout must fail the build instead of producing a misleading executable.

For the Siemens CID used in field validation the target remains: 2 DataSets, 58 static members, Analog 22/22, Digital 36/36, 58/58 represented, 0 missing, and no startup Sequence contains more than one element diagnostic.

@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 2b0a1cd into main Aug 15, 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