Skip to content

FAT: canonical Engineering rows and legacy evidence migration - #304

Draft
masarray wants to merge 86 commits into
fix/fat-workstation-convergencefrom
feat/fat-explorer-fast-capture-preview
Draft

FAT: canonical Engineering rows and legacy evidence migration#304
masarray wants to merge 86 commits into
fix/fat-workstation-convergencefrom
feat/fat-explorer-fast-capture-preview

Conversation

@masarray

@masarray masarray commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Follow-up to #296 for the field duplicate-row failure and the canonical Engineering -> FAT thin-view convergence.

Current branch scope:

  • normal FAT binds directly to canonical Engineering SelectedDevice.Points; FAT owns no second mutable row collection or acquisition runtime,
  • sparse FAT evidence is keyed only by stable IEC identity (IEDName + IEC Telegram) and remains outside canonical Engineering rows,
  • legacy/manual evidence is accepted only as passive migration/provenance and only on unique canonical mapping; ambiguous/orphan evidence fails closed,
  • P4C complete: one column authority owns exactly Signal | IEC Telegram | Quality | Live Value | Value 1 | Value 2 | Result,
  • P4D complete: explicit Print Preview captures one immutable selected-IED snapshot, preserves P4B Value 1/Value 2 timestamps, maps it once to IoFatReportLayoutPlan, renders through the existing FixedDocument/DocumentViewer authority, and Save PDF serializes that exact same layout instance,
  • P4E complete: restart/reorder evidence isolation including CSWI vs unrelated ThdPPV, cross-IED same-name isolation, orphan and duplicate identity fail-closed behavior, timestamp retention for digital/analog/DbPos/tap evidence, exact selected-IED report count/order, WPF recycled-cell current-row binding, and exact command TX -> feedback correlation,
  • P4E command correlation uses explicit control StatusReference only; native correlation and global stable-command confirmation fail closed when status identity is missing or ambiguous and never infer feedback from ObjectReference, SignalName, row/index order, or runtime DeviceId,
  • P5 complete in source/regression scope: automatic MainWindow.ProductionFatEngineeringBootstrap.cs, its MainWindow.ProductionFatNoFlicker.cs workaround, obsolete IoFatEngineeringWorkspaceProjectionService, projection-only IoFatCanonicalEvidenceMigrationService, and the now-unused AdoptEngineeringRuntimeWorkspaces zero-reparse bridge have been retired,
  • P5 restores IoTestSignalSelectionService to the normal SCL_DATASET_AUTHORITY / SCL_WORKSPACE_AUTHORITY contract; projection-only ENGINEERING_SCL_DATASET_AUTHORITY no longer exists,
  • P5 regression blocks projection/bootstrap/reconnect/second-acquisition APIs from native grid, ARM and report paths and fails if retired bridge files, projection authority, or Engineering-workspace adoption bridge are reintroduced,
  • explicit/manual IoListTestingWindow compatibility remains an isolated operator boundary only; normal IO testing import/preflight behavior stays available there, while native FAT legacy snapshot reading remains passive evidence migration and never opens the legacy workspace.

The prior Windows build failure (#2642) was a stale P1 source-contract test after P4C moved evidence-column ownership; it has been corrected. During P5 completion, stale P0/M2/M7/Engineering regressions that still required the retired automatic bootstrap were rewritten to protect the new native-entry boundary instead.

The completed P5 source tree is at 2040ba910a01f7ddef3c1232449b54c233935880. Fresh Build ARSAS / SV / IO validation workflows have been created for that HEAD and are currently queued by GitHub Actions. The PR remains draft; no merge/ready transition is requested here.

Base is fix/fat-workstation-convergence (PR #296 head) so CI reviews only the incremental repair.

Copy link
Copy Markdown
Owner Author

Field regression follow-up (2026-09-11): previous candidate 2cc9495 failed before FAT opened with Canonical Engineering FAT still contains a legacy manual SCL row after migration. The real Engineering projection uses immutable BindingStatus = ENGINEERING_SCL_DATASET_AUTHORITY, while the shared static-DataSet predicate recognized only SCL_DATASET_AUTHORITY; migration therefore skipped the real 58-row Engineering IED and the later guard found restored scl-manual-* history.

Fix on current head 4a02d82:

  • shared IoTestSignalSelectionService.IsSclDataSetAuthority now recognizes both direct-SCL and Engineering-projection static DataSet authority labels before synchronization/resolution,
  • migration keeps BindingStatus immutable and physically removes legacy manual aliases once canonical authority is present,
  • regression reproduces the field family (AA1E1F06R4, scl-manual-7496d038be4fdc18e340) and asserts authority is recognized before migration, evidence migrates to the unique canonical row, and no legacy row remains.

CI for current head: Build ARSAS #2585 success (including portable publish + smoke test), Validate IO List Testing #1138 success, Validate SV evidence bundles #1587 success. Next gate is relay field verification: Engineering 58 -> FAT 58, no legacy guard error, no 58->116 growth, Start FAT stays on shared Engineering acquisition.

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