Merge FAT current-pair PASS/live FO state into current main - #247
Conversation
Reconcile complete generic digital Value 1/Value 2 pairs with the existing current-evidence assessment, canonicalize visible Boolean case without rewriting raw evidence, and make the FAT IED card follow the live Engineering connection state without Refresh.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2237ec3293
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (point.CaptureMode != FatCaptureMode.AutomaticTransition || | ||
| point.Runtime.Value1Evidence == null || | ||
| point.Runtime.Value2Evidence == null || | ||
| point.Runtime.State is IoTestPointState.Passed or IoTestPointState.Review or IoTestPointState.Failed) |
There was a problem hiding this comment.
Reassess terminal states restored from legacy workspaces
When an older workspace already stores a terminal legacy verdict, this guard prevents the advertised current-pair migration from running. IoTestProjectPersistenceService.RestorePoint restores Passed, Review, and Failed without validating the generic evidence, so a row can retain PASS even when its displayed Value 1/Value 2 pair now evaluates to REVIEW because the values are identical, out of order, or poor quality. Reassess every complete generic pair here and let FatCurrentEvidenceAssessmentService handle generation-preservation rules.
Useful? React with 👍 / 👎.
| ?? engineeringWindow.Devices.FirstOrDefault(device => | ||
| device.IpAddress.Equals(plan.IpAddress, StringComparison.OrdinalIgnoreCase)); |
There was a problem hiding this comment.
Reject ambiguous IP-only runtime device matches
When LiveDeviceId is empty or stale and the name match fails, this fallback selects the first device sharing the plan's IP address. IoTestLiveBindingService.FindDevice deliberately accepts an IP-only match only when it is unique, so a multi-IED/shared-endpoint workspace that was correctly left unbound can nevertheless display another IED's ONLINE/OFFLINE state and status. Require a unique IP match or reuse the binding resolver's matching semantics.
Useful? React with 👍 / 👎.
Purpose
Integrate the physically motivated FAT current-pair / FO-state correction into the current
mainwithout dropping newer work already landed there.Pre-merge audit
Current refs at preparation time:
main:a47829df1b459cf41bdf3a9c5533a9da1b979b81feat/fat-v2-workspace-ui@2237ec32935ef4194610a9fe5fb39566a8545b665b6abaac287ace6eaeb607707e2ae3449079bdc4The branches are intentionally diverged: FAT source is +4 / -6 relative to current main. The six main-side commits are preserved; compare shows the main-only production changes are
IoTestRollingCaptureCoordinator.csplus its regression test and release metadata, while this FAT slice changes onlyIoListTestingWindow.CommissioningStatus.csand addsIoFatCurrentPairAndLiveBadgeRegressionTests.cs. There is therefore no file-level overwrite of the newer main-side FAT render/performance work.FAT slice retained
True/Falsewithout rewriting raw relay evidence;Other-thread protection
This PR does not merge, retarget, rewrite, close, or delete the still-open Smart Dynamic RCB / shadow-verification branches (#230 / #227). Their branch tips remain untouched. No ARIEC engine pin, dynamic-report authorization, SCL/DataSet identity, report planner, quality normalization, or release history is rewritten here.
Gate
Merge only after the PR merge-candidate CI is green against current
main.