Skip to content

fix(studio): restore one-click injection and simplify premium operator GUI - #214

Merged
masarray merged 5 commits into
mainfrom
fix/studio-fast-start-ribbon-density-20261017
Oct 17, 2026
Merged

masarray merged 5 commits into
mainfrom
fix/studio-fast-start-ribbon-density-20261017

Conversation

@masarray

Copy link
Copy Markdown
Owner

Package A · Fast workflow recovery / operator screenshots

The current preview regressed to mandatory Apply to board → Start and undersized ribbon actions. The operator asked to remove Apply entirely, enlarge commands, fix white-hover contrast, compact action menus, reclaim dead space and place state in one footer.

Exact source head: 014ab8a8a932d1205e63d1f95d13f0d9e701d382. One source commit, 23 files, no firmware changes.

One-click electrical workflow (safety-critical)

  • Offline Start activates only generated waveform preview; no serial SV output.
  • Connected/READY Start directly calls supervised SmartSessionController::requestStartWithScenario when a local draft is pending. One complete snapshot includes frequency, all 8 magnitude/phase/quality/enable states, CT shaping and START.
  • All-or-none worker admission: C++ validates 8 IDs and bounded scales/angles/quality/shaping before constructing the batch; queues a 19-command exclusive FIFO via existing DeviceIoWorker, with START last. It cannot partially enqueue under worker queue pressure or interleave other ordinary commands. Existing serial protocol and firmware untouched.
  • No false Running: UI enters Starting for bounded 8s; clears only on board RUNNING evidence, otherwise error/timeout restores dirty state. Worker admission is not a firmware ACK. PTP state is independent.
  • No explicit Apply button, no hidden mandatory Apply step, no automatic device programming just from reconnect.
  • Live edits after start still use the pre-existing direct setpoint workflow. Important remaining hardware gap: batch admission/order is not firmware-per-command ACK/readback nor sample-boundary atomicity; physical SV verification still required.

Premium operator UI

  • Main toolbar changed to 76px vertical Material ribbon with 24px icons and captions. White hover uses dark actual SVG variants and dark caption, bundled locally for deterministic Windows appearance.
  • Right-click menus have fixed content-count height, 212px width, 29px row height, subtle hover and no oversized blank card. Shift+F10/Menu key retained.
  • Voltage/current table height is content-driven; phasor panel gets shorter preferred height, waveform gets remaining room. Removed duplicated per-panel safety essays, shortened timing tooltips.
  • Footer becomes a concise single-place operator status: No ESP32 board detected · Preview mode only when offline and device/PTP/smpSynch/telemetry when connected. Non-error operations log and show in footer instead of flying toast.
  • Preserved working Inno installer, ESP32 firmware, PTP signal authority and screenshot/HiDPI/lifecycle tests. Cheap pre-compile test now explicitly rejects Apply-to-board UI and validates START ordering + ribbon sizing.

Exact-head acceptance

Wait for Qt normal/HiDPI smoke (zero TypeError/ReferenceError), deterministic session harness, Windows lifecycle viewport 960×620/1240×760/1440×900 at 100/150/175% DPI, product naming, RC2 and Native Preview/Inno. Do not rerun or edit for cosmetics while jobs are green/in flight. Review actual Windows screenshots plus physical ESP32/PTP+SV capture before declaring stable release.

@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-17T01:34:02.036586Z 014ab8a 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: 014ab8a8a9

ℹ️ 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 +32 to +36
function onRunningChanged() {
if (ribbon.device.running) {
ribbon.startQueued = false
startWatchdog.stop()
controller.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 edits made while START is pending dirty

If the operator changes a signal after clicking Start but before the board reports RUNNING, the queued snapshot still contains the old value and the editable controls do not transmit the new value because pendingApply remains true. This handler then unconditionally clears pendingApply, so the UI displays the new setpoint while the physical publisher runs the earlier one. Preserve a scenario revision across the asynchronous transition or disable edits until START is confirmed.

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

Useful? React with 👍 / 👎.

ToolTip.text: text
HoverHandler { id: evidenceHover }
}

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 Restore the timing evidence required by the CI gate

Removing this label makes the repository's operator-workspace gate fail unconditionally: check_operator_workspace.py still requires both SIMULATED metadata and sample phase needs independent verification, and .github/workflows/arstack-studio-qt.yml runs that script. Running python3 apps/arstack_studio/tests/check_operator_workspace.py at this commit exits with SV simulation must never masquerade as independently proven lock, so the Studio CI cannot pass until equivalent evidence text is retained or the contract is deliberately reconciled.

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

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Exact-head acceptance update — 1fa28f979922af0ffc0dea869d6ab505a8a1208d

The fast operator regression is implemented with no Apply-to-board button. Main START (offline=preview, verified ready=one C++ exclusive FIFO batch with 8 validated channel SET+ENABLE commands, frequency, CT shaping, START last); a bounded in-flight watchdog and board RUNNING evidence decide the UI state. Edits are frozen during the START snapshot and stopped-state edits are staged for the next Start, live edits remain incremental only when RUNNING.

Verified CI: Linux Qt build + normal and high-DPI QML load PASS, zero logged TypeError/ReferenceError, S8 deterministic session and Windows ownership PASS, RC2 Acceptance PASS, Windows Lifecycle including 100/150/175% geometry and close/reopen PASS, firmware build PASS. Native Inno Preview is still running — no merge until green.

Visual evidence: downloaded and inspected real native Windows 960×620 image from artifact 12085432928: primary ribbon enlarged icon-above-caption; no Apply control; clean single-line bottom status; denser voltage/current and time-sync panels; no clipping observed at minimum viewport. Hover color and context popup open-state still require manual screenshot/UI checks.

Caveat: exclusive queue admission/order is not wire-atomic ABC nor per-command firmware readback. RUNNING still requires the board START acknowledgement. Keep physical ESP32 SV/PTP acceptance separate.

@masarray
masarray merged commit d612c10 into main Oct 17, 2026
9 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