Skip to content

Studio P0: preserve PTP–SV baseline; fix angle updates and professional operator layout - #242

Merged
masarray merged 13 commits into
feature/studio-matched-ptp-sv-auto-20261017from
fix/studio-operator-polish-and-setpoint-consistency-20261018
Oct 18, 2026
Merged

masarray merged 13 commits into
feature/studio-matched-ptp-sv-auto-20261017from
fix/studio-operator-polish-and-setpoint-consistency-20261018

Conversation

@masarray

Copy link
Copy Markdown
Owner

Baseline lock

Build on existing integrated PTP–SV commit fb4329e73c3b80f7d6806e25538e6ceeb06ffc13. DO NOT touch ESP32-P4 firmware, PTP sample phase, packet codec, or smpSynch=AUTO qualification. Existing 120s evidence: canonical SV 480,294 frames, smpSynch=1 on all, zero counter discontinuities, 120 matched PTP Sync/Follow_Up, relative host epoch median ~49us (not hardware-precision certification).

User-observed regressions and fixes

  • EditSignal() had a dead live-update branch: markScenarioDirty set pendingApply=true while STOPPED, and live-edit only sent when !pendingApply. Running edits from restored state could leave GUI Ia=-30 while board continued outputting Ia=0. Now queue the exact ListModel values on real RUNNING edits independent of draft flag; pending status stays visible until queued. Both linked 3-phase and individual channels reuse existing sendSignal SSOT. START continues to serialize the exact model snapshot.
  • Stack Voltage and Current in ColumnLayout, reclaim huge blank middle/bottom space.
  • Enlarge title/logotype in ribbon; center RibbonAction icon/text.
  • Fix Advanced tab hover and CalmButton hover contrast (light surface/dark caption), stabilize checked checkbox visual.
  • Auto-start PTP SOURCE once when first verified device READY, without interlock/dialog. Operator OFF disables auto-start for session. smpSynch=AUTO, phasor and waveform remain default; no force-local flag.
  • Structural regression tests for phase live-queue, vertical stacking, pending status and bounded PTP-start.

Acceptance

Qt, Windows Lifecycle, Windows Preview installer, protocol-independent source checksum guard, physical manual screenshot / 4I+4V wire readback. Do not claim hardware relay acceptance solely from CI.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 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-18T03:07:49.723741Z 62465bc 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: 62465bcd22

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

pendingApply = true
// All edits are a draft until the matching command is queued.
// Never label a visible draft as proven transmitted waveform data.
pendingApply = true

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 Preserve live-update eligibility after marking edits dirty

When injection is RUNNING, every non-cell editor still calls markScenarioDirty() before checking !pendingApply; this unconditional assignment therefore makes those checks permanently false. Frequency/waveform mode, CT shaping, channel enabled/quality, balanced/zero, and the group context-menu actions now change only the QML model while the physical SV stream continues using the old values, and Start cannot apply them until the operator stops injection. These handlers need the same RUNNING-aware queue behavior added to editSignal, rather than using the draft flag to suppress transmission.

AGENTS.md reference: AGENTS.md:L74-L76

Useful? React with 👍 / 👎.

Comment on lines +492 to +493
if (!queued) showMessage("Signal update not queued; retry or Stop/Start.", true)
else pendingApply = 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 Keep older failed drafts pending after a later successful SET

A failed live update leaves pendingApply true, but any later successful signal update clears the global flag even if the earlier unsent edit was for another channel or for frequency/CT state. After Stop, WorkflowBar.requestStart() then sees no pending draft and calls requestStart() instead of requestStartWithScenario(), so the missed setpoint can remain unapplied while the footer claims synchronization. Clear this state only when all outstanding model changes are known to have queued successfully, or resend the complete scenario.

AGENTS.md reference: AGENTS.md:L74-L76

Useful? React with 👍 / 👎.

if (!session || !device.deviceVerified || !session.startReady ||
session.updatingFirmware || device.ptpStarting) return
root.ptpDefaultStartAttempted = true
if (!device.ptpRunning && !root.startPtpRole("SOURCE"))

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 OFF through intent cancellation

The automatic start calls root.startPtpRole(), which records ptpDesiredForSession = true, but the Advanced PTP switch still stops directly through panel.session.requestStopPtp() rather than root.requestStopPtp(). If an operator turns PTP off there and subsequently performs a successful firmware update, onFirmwareUpdateFinished observes the stale desired flag and silently restarts SOURCE despite the explicit OFF action. All PTP OFF surfaces must clear the shared session intent before stopping.

AGENTS.md reference: AGENTS.md:L74-L76

Useful? React with 👍 / 👎.

@masarray
masarray merged commit 3fb9969 into feature/studio-matched-ptp-sv-auto-20261017 Oct 18, 2026
7 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