Skip to content

P0 Studio UI polish: exact table-to-SV START, stacked 4V/4I, readable controls - #237

Open
masarray wants to merge 20 commits into
feature/studio-matched-ptp-sv-auto-20261017from
fix/studio-operator-ui-setpoint-20261018
Open

masarray wants to merge 20 commits into
feature/studio-matched-ptp-sv-auto-20261017from
fix/studio-operator-ui-setpoint-20261018

Conversation

@masarray

Copy link
Copy Markdown
Owner

Keep the proven SMV/PTP sync baseline frozen

This is a Studio QML UX/setpoint workflow PR stacked onto integrated M3 branch and does not change any firmware, MAC timestamp, PTP, SV sample clock, smpCnt, smpSynch policy or protocol wire packet. Retain previously observed AUTO local-reference behavior; do not claim physical relay acceptance from GUI CI.

Root-cause fix: GUI angles != output

WorkflowBar previously selected bare smartSession.requestStart() whenever pendingApply=false despite that boolean not constituting wire readback. This could reuse stale board phases (e.g. Ia=0°) even while the displayed table showed Ia=-30°. Every START now always sends requestStartWithScenario(controller.startScenarioSnapshot()): full 8-channel magnitude, phase, enable, quality, frequency, scaling and shaping in the existing bounded exclusive FIFO before START. The device only becomes RUNNING after ACK. Live edits retain their established bounded SET pipeline. No new UI prompts.

Layout and controls

  • Stack voltage and current matrices vertically, full width, allow them to fill otherwise blank workspace, and shorten rows so four channels fit.
  • Increase SMV logo from 15px to 25px, surround badge from 28px to 38px, enlarge title from 11px to 14px at normal desktop width.
  • Align ribbon control icons and captions; keep Phasor and Wave both visible by default.
  • Unified light hover / dark caption across Advanced CalmButton, tabs, combo popup and icon buttons; stabilize checkbox indicator at 19px without hover variant.
  • Default PTP SOURCE requested ON once per app session after verified board becomes Ready; PTP switch remains device telemetry owned, OFF immediately cancels future auto/reflash restarts. smpSynch selector default remains AUTO; no forced local/global flags.

Gates

Operator structural regression covers complete snapshot-to-START, default ON/off cancellation, layout, hover and branding. Run exact-head Qt, Windows Lifecycle, Windows Native Preview and firmware/PTP comparison. Verify screenshot at normal desktop DPI; report no physical bench sync claims from UI-only changes.

@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-17T23:13:20.214938Z d4a7423 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: d4a74237dd

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

# P0: software timing, SV egress/smpCnt and phase-angle staging must
# stay untouched by a UI-only reflow. Every START sends the actual
# eight visible channel phases, not a stale pre-existing board state.
require("const accepted = smartSession.requestStartWithScenario(" in workflow

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 Initialize workflow before checking it

The Studio workspace CI gate now reads the local variable workflow here before its assignment at line 114. Running python3 apps/arstack_studio/tests/check_operator_workspace.py therefore always raises UnboundLocalError at this line, preventing every subsequent structural regression assertion from running and failing the arstack-studio-qt.yml job. Move workflow = source("WorkflowBar.qml") before this new assertion.

AGENTS.md reference: AGENTS.md:L230-L236

Useful? React with 👍 / 👎.

}

RowLayout {
ColumnLayout {

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 Update the viewport assertion for stacked matrices

Changing this container from RowLayout to ColumnLayout makes the voltage and current matrices occupy the same horizontal range, but checkOperatorViewport() in apps/arstack_studio/src/main.cpp:85 still requires voltage.area.right() <= current.area.left() + tolerance. Consequently every --check-operator-ui run reaches the panel-order failure and exits 21, including the Windows lifecycle geometry job; update that acceptance check to assert the new vertical ordering and containment.

AGENTS.md reference: AGENTS.md:L249-L263

Useful? React with 👍 / 👎.

Comment on lines +121 to +122
property bool ptpDesiredForSession: true
property bool defaultPtpStartAttempted: false

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 Route Advanced PTP actions through session intent

With the session intent now initially true, an operator who turns PTP off from the Advanced panel does not cancel that intent: both Advanced stop paths call session.requestStopPtp() directly in PtpExpertPanel.qml rather than root.requestStopPtp(). After a later successful firmware update, onFirmwareUpdateFinished still sees this property as true and automatically restarts PTP SOURCE despite the explicit OFF; Advanced starts likewise do not update ptpDesiredRole, so a selected receiver/monitor role can be restored as SOURCE. Route all PTP start/stop entry points through the intent-owning controller.

AGENTS.md reference: AGENTS.md:L74-L86

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Frozen SMV/PTP baseline / no regression permitted. Parent M3 integration commit fb4329e73c3b80f7d6806e25538e6ceeb06ffc13 previously showed canonical 4000 fps, clean smpCnt, PTP two-step SOURCE and AUTO local smpSynch=1 after acquisition, with host-relative SV/PTP epoch alignment. PR #237 must modify only Studio UI and its operator regression tests; source diff verified no embedded/, include/ariec61850/time_sync/ or src/time_sync/ changes. UI acceptance must verify displayed Ia=-30° is staged to SET IA <counts> -30000 <quality> via existing exclusive scenario START, NOT merely drawn on GUI; check live SET path separately. Avoid fake lock or forced smpSynch=1. Preview bundles unchanged matched M3 firmware. Use real Windows screenshot review after CI for title size, layout and hover/checkbox sizing; CI alone cannot certify visual quality.

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