Skip to content

P0: repair FAT relay-bench runtime latency - #265

Draft
masarray wants to merge 198 commits into
fix/p2-fat-compact-headerfrom
fix/fat-relay-bench-p0-runtime
Draft

P0: repair FAT relay-bench runtime latency#265
masarray wants to merge 198 commits into
fix/p2-fat-compact-headerfrom
fix/fat-relay-bench-p0-runtime

Conversation

@masarray

@masarray masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner

FAT relay-bench recovery — field round-3 candidate / physical relay re-bench required

Golden reference remains Build #1888 / ARSAS commit 712e2c557d5da83d2f02b81f3a58905e985d1e50. ARIEC61850 remains immutable at pin 11ab2304482600c19ba979f4fc9021ddb46b9af9; no ARIEC source, patch, package pin, or lock change is part of this recovery.

Previous relay candidate 725b96fae257cf65aec4d8282b3016ffb98887f3 failed the physical gate: COMTRADE showed a duplicated synthetic tick, the production RCB action still surfaced RCB Export Filter — Legacy SAS, and Sync could start unchecked.

Current exact candidate head: 96cc945a62f481689ed26b85eb404f47ca4e3327.

Field round-3 corrections

  • COMTRADE selection: removed the synthetic content/glyph entirely. The real WPF checkbox owns checkbox clicks; the separate class handler now handles row-body clicks only. Downloaded records still use _redownloadSelections, first downloads use IsSelected, and staged safe overwrite remains unchanged. One click = one state transition = one normal checkbox tick.
  • RCB multi-select production route: the IED-card RCB action is intercepted at the Button.ClickEvent class-handler level before the legacy XAML instance handler can run. The realized button also removes IedEditRcb_Click and installs IedEditRcbMulti_Click. Identification no longer depends on Tag != null; the operator-facing route must open RCB Export — Generic IEC 61850 SCL. The multi window retains independent RcbExportRow.IsSelected checkboxes and exports every selected RCB.
  • Interlock/Sync default: command-default registration moved from an unreliable static-field initializer to a [ModuleInitializer] class-handler registration. Every command signal is initialized Interlock=true and Sync=true; those defaults are protected while ctlModel hydrates, written once more when ctlModel resolves, then operator changes are respected.

Existing relay-bench protections retained

  • FAT semantic DO/DA/phase-aware names and IEC Reference resizing;
  • report-snapshot LIVE projection before Value1/Value2 evidence;
  • FAT membership never silently mutates TEST;
  • OFFLINE/reconnect and shared Engineering/FAT command backend;
  • multi-RCB SCL keeps selected native RCBs/native DataSets only and does not create ARSAS runtime acquisition DataSets;
  • PR remains Draft and must not merge until physical relay validation passes.

Exact-head CI gate — GREEN on 96cc945a

  • Build ARSAS #2125 — source/invariant checks, solution build, full regression, portable publish, portable smoke test, artifact upload.
  • Validate IO List Testing #995.
  • Validate SV evidence bundles #1221.
  • ✅ Full regression suite: 808 / 808 passed, 0 failed.
  • ✅ ARIEC61850 immutable lock/API verification passed at 11ab2304482600c19ba979f4fc9021ddb46b9af9.

Portable candidate:

  • Artifact: ARSAS-win-x64-portable-single-exe (10022385436)
  • Artifact ZIP SHA-256: 0b053d82616a36e4ad3e5e9e5891f9c415c66dbde3d5de5b0c5e586db4303ef5
  • Executable: ARSAS-1.6.33-win-x64-portable.exe
  • EXE SHA-256: 6d2903cf51b6c9c401b1d67ac5ef76b0cde70c548eab11798a0fd69019b64455

Physical relay re-bench gate for this exact build

  1. COMTRADE row must show exactly one normal checkbox tick; checkbox click and row click each toggle exactly once; multiple downloaded records remain selectable.
  2. IED-card RCB action must open RCB Export — Generic IEC 61850 SCL, never Legacy SAS; select 2+ arbitrary RCBs and verify all remain checked through export.
  3. Engineering and FAT command rows must initially show Interlock checked + Sync checked. After ctlModel is resolved, a deliberate operator uncheck must remain respected.

Keep this PR Draft. Do not merge until exact head 96cc945a passes the physical relay re-bench.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

Relay-bench P0 Gate 1 is green at db81148d0f429f6df27c0eea577b6ea8e07164f6.

Passed:

  • Build ARSAS #1929
  • Validate IO List Testing #802
  • Validate SV evidence bundles #1027

Gate 1 repairs report-backed analog Value 1/Value 2 latency and removes per-event physical disk barriers while keeping final journal durability/seal verification. Proceeding to the next isolated gate: fast FAT attach to an already-live shared Engineering Static DataSet/RCB acquisition session. PR remains draft and must not merge before physical relay acceptance.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

P0 LIVE VALUE + Command Panel gate completed on c1063c79b9fbc47341542f70695df8be50cd4ccc.

  • LIVE VALUE now prefers the shared Engineering device.Points process image/report-backed state; non-forced MMS inspection remains only for missing values.
  • FAT Command Panel retains row instances for normal value/result/busy updates. LIVE VALUE/result/model/enablement are bound in-place; structural synchronization happens only when the command collection changes, and confirmation/semantic transitions replace only the action cell.
  • Regression coverage now explicitly rejects RebuildFatCommandRows and forced FAT RefreshControlValuesAsync(..., force: true).
  • CI corrections during the gate were limited to completing required IoTestPointPlan fixture fields and updating the old source-text assertion to the new null-safe/shared-collection implementation.

Full CI green:

  • Build ARSAS #1945 ✅ (full regressions + portable publish/smoke)
  • Validate IO List Testing #818 ✅
  • Validate SV evidence bundles #1043 ✅

ARIEC61850 source was not modified; immutable pin remains 11ab2304482600c19ba979f4fc9021ddb46b9af9.

PR intentionally remains draft. Physical relay-bench Start/capture/Recapture/command/LIVE VALUE acceptance is still required before merge.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

P0 locked-scope verification — LIVE VALUE + stable Command Panel

Re-verified the current PR head c1063c79b9fbc47341542f70695df8be50cd4ccc against the locked P0 scope.

  • LIVE VALUE is genuinely live, not attach-time-only: the FAT bridge seeds values from the shared Engineering device.Points process image, rebuilds the control-feedback index, and the existing runtime point-update path projects matching report-backed point updates into SignalDefinition.ControlCurrentValue through _controlFeedbackIndex.
  • No normal full-row rebuild: Command Panel retains row view instances; ControlCurrentValue, ControlLastResult, busy/enabled state, CDC and control-model text are binding-driven. Structural collection changes synchronize rows; confirmation/semantic transitions replace only the action cell.
  • No forced FAT MMS refresh regression: fallback refresh remains force: false; shared process-image projection is reapplied afterward.
  • ARIEC61850 remains immutable for this P0: pinned engine revision 11ab2304482600c19ba979f4fc9021ddb46b9af9; no engine-source change is needed.

Full CI on this exact head is green:

  • Build ARSAS #1945 — success
  • Validate IO List Testing #818 — success
  • Validate SV evidence bundles #1043 — success

No additional code churn is warranted for this locked P0. PR should remain draft until physical-relay acceptance; P1 remains out of scope until that gate is stable.

masarray commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

Repair status update — current head 478909f

Implemented on this branch:

  • Rolling Value 1 / Value 2 — a completed evidence pair now advances on each new real process condition; repeated identical values do not churn evidence. Example 0 → 1000 → 0 ends at Value1=1000, Value2=0.
  • Start FAT / preparation UI hot-loop removal — the preparation progress layer no longer traverses the full WPF visual tree every 50 ms at Render priority. It now runs at Background priority / 100 ms, returns immediately while idle, and updates cached progress bars only while preparation is active. A regression test locks this behavior.
  • COMTRADE FAT report cleanup — removed the Download column plus OPTIONAL / not a FAT gate wording. FileDirectory evidence now presents the remote file identity, relay-modified timestamp, and evidence source directly. Regression assertions now reject the removed wording.

Previously locked on the same PR:

  • ✅ already-live Engineering fast attach for FAT Start
  • ✅ event-driven report-backed first/changed value capture
  • ✅ no per-event physical disk barrier in evidence journal
  • ✅ command-panel routine updates without full-row rebuild
  • ✅ LIVE VALUE projected from the shared Engineering process image, with no forced FAT MMS refresh

Still open / not yet claimed fixed:

  • ⏳ close-path latency while active evidence journals are synchronously sealed/verified
  • ⏳ command Open/Close latency on a physical relay
  • ⏳ multi-RCB selection/export workflow
  • ⏳ normalized already-downloaded COMTRADE re-download/overwrite selection
  • ⏳ one-row FAT header + report sign-off block

Current full CI has been triggered for head 478909f; Build ARSAS, Validate IO List Testing, and Validate SV evidence bundles are still running at the time of this update. ARIEC61850 remains unchanged at immutable pin 11ab2304482600c19ba979f4fc9021ddb46b9af9.

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