Skip to content

Fixed 2x2 live-run dashboard, visible run timer, START/STOP gating - #185

Merged
gbradham merged 3 commits into
mainfrom
claude/dashboard-run-timer
Oct 1, 2026
Merged

gbradham merged 3 commits into
mainfrom
claude/dashboard-run-timer

Conversation

@gbradham

Copy link
Copy Markdown
Member

Replaces the swappable dashboard with the fixed live-run layout the user asked for, and fixes the Run Control timer disappearing during a run.

Layout (fixed, equal quadrants)

Camera Feed (unchanged; still re-hosts to the Builder camera dock) Device States & Timer: big elapsed timer, state pill and ● REC above the device cards
Start, Stop, Metadata: status line, ⚙ menu (Help / Switch to desktop / Close), New / Open / Save / Save As / Connect-Ports, captioned fields for experiment name, experimenter, protocol and notes, then START/STOP Manual Control (unchanged)
  • Metadata edits write to session.metadata, mark the session dirty, and lock while RUNNING/PAUSED.
  • Timing logic stays in RunControlPanel. The header only shows the text it emits through elapsed_updated, so the time text has a single source.
  • Removed: quadrant_host.py, layout.py, layout_store.py, panel_registry.py, experiment_info_panel.py and their tests, along with the picker/drag-swap code, dashboard_layout.json persistence and the dashboard's run banner. RunBanner itself stays for the runner-mode shell, which is unchanged.
  • The dashboard's HardwarePanel is still built but hidden. It backs the Connect / Ports dialog and the hardware-change refresh.

Bug fixes

  • Timer vanished while running. The Run Control panel hid its timer when live and expected the banner to show it, but DashboardView hid the banner whenever Run Control was on screen.
  • START/STOP. START stayed enabled mid-run, and neither button had a disabled style, so START always looked green and STOP always grey. START now enables only when the rig is ready and no run is live, and STOP only while a run is live. Disabled buttons are dimmed in both desktop.qss and touch.qss. The Run tab (runner_panel.py) got the same gating.

Tests

  • New tests cover:
    • fixed panel placement and equal quadrant sizes
    • timer visible in every state
    • REC indicator
    • START/STOP gating
    • metadata writes and the lock while a run is live
    • reload on session change
    • Connect / Ports opens the board-settings dialog
  • Full suite: 5789 passed, 4 skipped. The count is lower than on main because the removed layout system's tests are gone. ruff and black are clean.

…P on the run

The dashboard's Run Control panel hid its timer while running, expecting the
banner, but DashboardView hides the banner while that panel is on screen.
START also stayed enabled mid-run and neither button had a disabled style,
so START always looked green and STOP always grey. START now enables only
when ready and idle, STOP only mid-run, and both dim when disabled.
Camera Feed | Device States & Timer / Start, Stop, Metadata | Manual Control.

- DashboardView is now a fixed equal grid with a run header (timer, state
  pill, REC) atop the device states; RunControlPanel keeps the run clock and
  feeds the header via elapsed_updated, so the timer shows in every state.
- RunControlPanel gains editable name/experimenter/protocol/notes bound to
  session.metadata (read-only while live), file actions, the readiness status
  line and the housekeeping menu, replacing the Experiment Info panel.
- Remove the swappable quadrant machinery: QuadrantHost, layout model and
  persistence (dashboard_layout.json), panel registry, the dashboard's
  RunBanner wiring, and their tests.
- The dashboard's HardwarePanel stays built but hidden: it backs Connect /
  Ports and the hardware-change refresh fan-out.
…view

A filled field hides its placeholder, so experimenter and protocol values
read as unlabelled text; each field now has a caption. The file-action row
sits above the metadata so it never scrolls off a short quadrant.
@gbradham
gbradham merged commit 5baacfd into main Oct 1, 2026
4 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