Skip to content

P0: recover Build #1888 FAT live and shared SCL authority - #262

Draft
masarray wants to merge 76 commits into
mainfrom
fix/p0-1888-fat-recovery
Draft

P0: recover Build #1888 FAT live and shared SCL authority#262
masarray wants to merge 76 commits into
mainfrom
fix/p0-1888-fat-recovery

Conversation

@masarray

@masarray masarray commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Baseline

This P0 recovery branch starts exactly from the accepted golden ARSAS Build #1888 source:

  • ARSAS: 712e2c557d5da83d2f02b81f3a58905e985d1e50
  • Golden EXE SHA-256: 063751919b51ef1bf13f666441ec2fff7e1f5a54a5b647295c158abbd732a0d6
  • ARIEC61850 lock remains: 11ab2304482600c19ba979f4fc9021ddb46b9af9

This PR does not use Build #1868, PR #257, or Build #1898 as its recovery base.

P0 fixes

  • Project the existing _runtime.PointUpdated stream into FAT Runtime.CurrentValue without UI polling/timers or per-cell subscriptions.
  • Canonicalize Boolean FAT presentation to True / False before first visible FAT frame and on subsequent runtime updates.
  • Keep analog evidence owned by the existing FatAutoCaptureCoordinator; hide the normal ✓ Capture row button while retaining Recapture correction behavior.
  • Initialize Engineering control Interlock and Synchronism checks ON once when command signals enter the runtime model; later operator changes are not forced back.
  • Preserve an explicit Static DataSet choice when SCL is opened from FAT instead of silently demoting it to Hybrid.
  • Preserve Static DataSet authority for appended FAT SCL IEDs as well.
  • Mark an already-populated SCL Engineering model reusable so Engineering Play takes the saved/SCL connect path instead of launching a second Live Discovery.

Safety / non-goals

  • No VirtualizingPanel.SetVirtualizationMode(...) changes.
  • No _uiFlushTimer/DispatcherTimer live mirroring.
  • No ARIEC61850 engine change.
  • No RCB/DataSet backend redesign.
  • No evidence/session-format redesign.
  • No FAT legacy-first-paint -> Value1/Value2 schema redesign in P0; that remains a separate P1 technical-debt item after recovery is stable.

Bench acceptance gate

  • FAT rows and Command Panel stay populated.
  • Engineering/Diagnostics remain responsive through FAT -> Engineering -> FAT.
  • No WPF virtualization exception.
  • Physical Open/Closed changes are reflected in FAT Live Value consistently with Engineering.
  • Boolean values appear as True / False from first visible value and remain stable while scrolling.
  • Analog Value1/Value2 captures automatically; normal manual Capture button is absent.
  • SCL opened from FAT with Static DataSet populates Engineering immediately; Play connects/activates the existing SCL/static report model without running full Live Discovery.
  • Static DataSet/RCB and Command Signals remain present and functional.

Do not merge until CI is green and the exact artifact passes physical relay bench validation.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

Bench regression follow-up after Build #1912 is now implemented on head c5fc74e2211c72f23ddb368f9bfb2a76ae2f0df5.

Targeted fixes:

  • Runtime PointUpdated FAT projection is now WPF-free/fail-isolated on the worker callback, preventing a presentation exception from turning a physically successful control into COMMAND FAILED.
  • FAT live projection resolves exact live-point identity and bridges unique static DataSet DisplayReference members to the ARIEC-resolved scalar runtime ObjectReference.
  • IoTestLiveBindingService now performs the same exact structured-member -> runtime-leaf bridge before FAT session arming, so analog rows can become LivePointReady and use the existing 3-sample auto-capture path.
  • FAT LIVE/VALUE1/VALUE2 templates render canonical True/False; normal per-cell ✓ Capture controls are removed from the replacement template while Recapture remains available.
  • Header actions are split into primary and secondary adaptive rows.
  • Close lifecycle quiesces FAT live projection before evidence sealing/persistence and resumes it if close is aborted.

Validation on this exact head:

  • Validate IO List Testing #792: SUCCESS
  • Validate SV evidence bundles #1017: SUCCESS
  • Validate ARSAS Windows installer #700: SUCCESS
  • Build ARSAS #1919: SUCCESS
  • Build solution: SUCCESS
  • ARSAS regression tests: SUCCESS
  • Portable publish: SUCCESS
  • Portable smoke-test: SUCCESS

Artifact ARSAS-win-x64-portable-single-exe id 9979633455 was produced by Build #1919. Extracted EXE SHA-256: 140f30e4317500cd45c93b614cbb3f9be96f76b1c1c7e42c8d6e4c1e02a786ae.

PR remains DRAFT. Do not merge until the exact Build #1919 executable passes the physical relay bench acceptance gate.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

P0 bench follow-up applied on head ed7152f9bfcbead63ae1606c286e6e58420c6273.

Changes in this follow-up:

  • FAT Start/Continue now keeps evidence baseline hashing + durable journal I/O off the WPF Dispatcher.
  • FAT Stop now runs final journal append/dispose/hash verification plus durable workspace save off the WPF Dispatcher.
  • Workspace close uses the same non-blocking StopAll/seal/save path after quiescing the FAT runtime projection.
  • Remove from FAT recovery is deterministic again: Removed Signals (N) no longer depends on an exact Button.Content == "Engineering" caption. It also falls back to the stable Export action panel, so a renamed Engineering Workspace caption cannot hide restore again.
  • Existing RemovedFatSignalsWindow / RestoreToFat() remains the authority; no signal identity/evidence is deleted by Remove.
  • Added P0 regression coverage for responsive Start/Stop/Close and reversible Remove.

CI for this exact head is green:

  • Build ARSAS #1924: SUCCESS
  • Validate IO List Testing #797: SUCCESS
  • Validate SV evidence bundles #1022: SUCCESS
  • Validate Windows installer #703: SUCCESS
  • portable EXE publish + smoke-test: SUCCESS

Keep PR Draft. Physical relay bench still required before merge.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

P0 bench candidate updated at 50d7f899224d61010e87c95f50826594a0fde4bc.

  • Restored exact golden ARIEC61850 pin 11ab2304482600c19ba979f4fc9021ddb46b9af9.
  • FAT Session.Start/Stop/StopAll remain on the owning WPF Dispatcher; no whole-session Task.Run, preventing the cross-thread different thread owns it Start FAT failure.
  • Multi-RCB Legacy SAS export is implemented in the ARSAS layer using the golden engine's existing SclReportControlFilter multi-selection capability; no acquisition/control engine change.
  • Independent checkbox selections are preserved; availability/default focus does not clear existing operator selections.
  • In use remains selectable with confirmation; no-DataSet RCBs remain visible/selectable as evidence but P0 CID export refuses to invent a DataSet binding.

CI: Build ARSAS #1950 SUCCESS; regression tests SUCCESS; portable publish + smoke test SUCCESS; IO List, SV evidence, Legacy SAS RCB guard, and Windows installer validations all SUCCESS.

Keep PR Draft. Physical relay bench validation is still required before merge.

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