Skip to content

Operator-first UX: calm analyzer scope, readable phase metering and progressive diagnostics/PTP - #33

Merged
masarray merged 6 commits into
mainfrom
fix/premium-operator-ui-hierarchy-20261017
Oct 17, 2026
Merged

masarray merged 6 commits into
mainfrom
fix/premium-operator-ui-hierarchy-20261017

Conversation

@masarray

@masarray masarray commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

Operator UX audit — 4 real Windows screenshots, Oct 17

The default analyzer panel showed repeated stream summaries, a permanent cursor tooltip drawn over live waveforms, a cramped/overlapping metering 2-column layout, redundant status paragraphs, and a semantic context bug: selecting a PTP source in Diagnostics still presented global SV sequence/arrival/signal cards.

Changes

  • Metering: replace the two tiny RMS+angle columns with a full-width six-phase ledger (Ua/Ub/Uc/Ia/Ib/Ic); consistent phase marker, RMS, angle and tooltip, no clipping by angle stack. Keep the explicit per-stream uncalibrated/scaled selector visible and move P/Q/S/PF and calibration caveats to Power & scaling details.
  • Scope: remove on-trace phase badges and permanent cursor inspection-chip row; fixed phase legend in a lane header and drag-only cursor, no synthetic signal changes. Shorten primary header. No render-per-packet or extra caches.
  • Stream Explorer: remove duplicated selected-stream hero card and move svID/APPID/confRev/channel mapping to the collapsible Stream details; retain current selection ownership.
  • Diagnostics: one status plus supporting value per card; move explanatory fields into tooltips. Separate SV, PTP, and GOOSE cards by selected diagnostic target so a PTP selected target does not show a smpCnt/4kfps metric for an SV publisher. Source evidence is still read-only.
  • Timing/PTP: keep compact confidence level while preserving full timestamp uncertainty via tooltip and protocol details via expander. Passive PTP observation never claims servo LOCK.

Verification and limits

CI Windows WPF/XAML compiler, xUnit regression, runtime stability, dependency review, CodeQL and portable candidate packaging must pass for the latest HEAD. Screenshots at 1366x768 and 1600x900 with real capture / font DPI scaling need physical operator QA after installing the artifact. Do not claim pixel-perfect approval from automated compilation. All waveform/snapshot, calibration authority and capture path semantics unchanged.

…idth RMS/angle phase ledger and on-demand power details
… chips; show lightweight lane legend and drag-only sample inspection
… keep technical metadata in a detail expander
…ote repetitive explanations to contextual details
…lapse verbose protocol caveats and remove repetitive copy
…PTP never displays unrelated SV global measurements
@masarray
masarray marked this pull request as ready for review October 17, 2026 08:50
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T08:52:48.246866Z 51d2f7b Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@masarray
masarray merged commit 086b260 into main Oct 17, 2026
7 checks passed
@masarray
masarray deleted the fix/premium-operator-ui-hierarchy-20261017 branch October 17, 2026 08:50

@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: 51d2f7b1bb

ℹ️ 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".

<StackPanel>
<TextBlock Text="TWO-STEP" Foreground="#91B3CF"
FontSize="10.5" FontWeight="SemiBold"/>
<TextBlock Text="{Binding Diagnostics.PtpMatchedTwoStepCount, StringFormat={}{0}}"

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 Refresh the PTP pair count shown in the card

When PTP remains selected while capture runs, this binding does not refresh: each analyzer refresh replaces _state.Diagnostics, but RaiseDiagnosticsProperties() raises only the derived PTP properties rather than Diagnostics, and SvDiagnosticsSnapshot does not implement property notifications. The primary count therefore remains at its initial value—often zero—while PtpTwoStepEvidenceText directly below it updates and can report a different pair count. Bind this value through a notifying view-model property or notify Diagnostics when the snapshot is replaced.

Useful? React with 👍 / 👎.

<StackPanel>
<TextBlock Text="STATE NUMBER" Foreground="#91B3CF"
FontSize="10.5" FontWeight="SemiBold"/>
<TextBlock Text="{Binding SelectedGooseMessage.StNum, StringFormat={}{0}}"

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 Refresh the selected GOOSE state after each snapshot

When a GOOSE target stays selected, RefreshAsync() replaces _selectedGooseMessage with the matching object from every new snapshot without raising PropertyChanged for SelectedGooseMessage; GooseMessageItem itself is also non-notifying. Consequently this new direct binding retains the old object's StNum (and the adjacent SqNum) precisely when a publisher changes state, so the diagnostic card remains stale until the operator reselects the target. Raise the selection notification after reconciliation or expose these values through notifying properties.

Useful? React with 👍 / 👎.

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