Skip to content

Operator UX lift: real Ua zero-cross scope, actionable GOOSE empty state, concise SCL and diagnostics - #39

Merged
masarray merged 10 commits into
mainfrom
feat/operator-ux-phase-aligned-scope-20261018
Oct 17, 2026
Merged

masarray merged 10 commits into
mainfrom
feat/operator-ux-phase-aligned-scope-20261018

Conversation

@masarray

Copy link
Copy Markdown
Owner

Shipped implementation

  • Phase-aligned receive-only oscilloscope: prefer positive-going Ua crossing as the beginning of a real contiguous coherent SV waveform/phasor/RMS window. No synthetic sine, interpolated/fabricated values, or independent per-channel phase shifts. Keep slot-locked fallback for missing/flat Ua or insufficient frames; bounded work only on snapshot publication. Real 2-cycle capture may initially be pending/slot-locked until one extra captured cycle is available.
  • GOOSE: actionable, contextual empty-state guidance when filtered events are absent; explains absence ≠ offline and provides adapter/SPAN/TAP/filter/retransmission checks.
  • SCL: concise selected-stream identity verdict with grounded mismatch signal, match score explicitly not a probability, detailed original expected vs observed plus binding evidence retained in expander.
  • Diagnostics: one concise evidence-driven operator next-check and unchanged real metrics, full forensic event list retained.
  • No extra overlays during normal live work; avoid packet-thread/UI work and parallel caches.

Gates

  • Windows Release build + test
  • Runtime stability
  • CodeQL
  • Dependency security review
  • Verified Windows portable artifact
  • Physical QA: injector variable phase / 1366×768 / 125–150% DPI / packet loss and transitions (requires external GUI hardware)

Independent clock lock, publisher timing accuracy, IEC 61850 certification, field acceptability and IED receiver are not claimed by software CI. Refer to physical acceptance issue #30.

@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-17T22:43:34.867810Z 3bb970e PR opened
ℹ️ 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.

@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: 3bb970e4c2

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

Comment on lines +1671 to +1672
previous.Value > 0 || current.Value < 0 ||
(previous.Value == 0 && current.Value == 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.

P2 Badge Count an exact zero as only one rising crossing

When Ua contains the common sequence negative, 0, positive, both the zero sample and the following positive sample satisfy this predicate. Because the scan selects the newest candidate, a snapshot taken as the zero becomes eligible starts at zero, while the next received frame moves the start forward one sample. A steady 80-sample/cycle waveform can therefore jump by 4.5° depending only on snapshot timing, reintroducing the scope flicker this alignment is intended to remove; require one side of the crossing to be strictly signed so an exact zero produces a single trigger.

Useful? React with 👍 / 👎.

Comment on lines +1690 to +1692
// Flat/noisy Ua is not a meaningful phase reference.
if (contiguous && peak > 1e-6)
return start;

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 noisy Ua before using it as a phase trigger

For a missing or noise-only Ua channel with raw values such as ±1 count, peak > 1e-6 is always true, so every noise-induced negative-to-positive transition is accepted as a phase reference. The selected start then moves among arbitrary noise crossings on successive publications instead of using the documented slot-locked fallback. Validate that Ua has a meaningful periodic amplitude/crossing slope relative to its noise level rather than merely checking that one sample is nonzero.

Useful? React with 👍 / 👎.

@masarray
masarray merged commit 05e794b into main Oct 17, 2026
7 checks passed
@masarray
masarray deleted the feat/operator-ux-phase-aligned-scope-20261018 branch October 17, 2026 22:47
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