Skip to content

Merge FAT current-pair PASS/live FO state into current main - #247

Merged
masarray merged 4 commits into
mainfrom
feat/fat-v2-workspace-ui
Sep 3, 2026
Merged

Merge FAT current-pair PASS/live FO state into current main#247
masarray merged 4 commits into
mainfrom
feat/fat-v2-workspace-ui

Conversation

@masarray

@masarray masarray commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Purpose

Integrate the physically motivated FAT current-pair / FO-state correction into the current main without dropping newer work already landed there.

Pre-merge audit

Current refs at preparation time:

  • main: a47829df1b459cf41bdf3a9c5533a9da1b979b81
  • FAT source: feat/fat-v2-workspace-ui @ 2237ec32935ef4194610a9fe5fb39566a8545b66
  • merge base: 5b6abaac287ace6eaeb607707e2ae3449079bdc4

The 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.cs plus its regression test and release metadata, while this FAT slice changes only IoListTestingWindow.CommissioningStatus.cs and adds IoFatCurrentPairAndLiveBadgeRegressionTests.cs. There is therefore no file-level overwrite of the newer main-side FAT render/performance work.

FAT slice retained

  • complete automatic discrete Value 1 / Value 2 pair with opposite states projects PASS through the existing current-evidence assessment;
  • visible Boolean presentation is canonicalized to True / False without rewriting raw relay evidence;
  • FAT IED card follows the live Engineering runtime connection state so FO loss no longer waits for manual Refresh;
  • reconnect behavior remains owned by the existing monitor runtime.

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.

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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +121 to +122
?? engineeringWindow.Devices.FirstOrDefault(device =>
device.IpAddress.Equals(plan.IpAddress, StringComparison.OrdinalIgnoreCase));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@masarray
masarray merged commit 3c15a27 into main Sep 3, 2026
3 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