Commit Graph
1615 Commits
Author SHA1 Message Date
perl_d 8e68972625 fix: show viewing mode for all states
CI / lint (pull_request) Successful in 38s
CI / test (3.12) (pull_request) Successful in 1m23s
CI / test (3.11) (pull_request) Successful in 1m32s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m26s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m29s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 2m7s
CI / test (3.13) (pull_request) Successful in 3m1s
CI / test-with-coverage (pull_request) Successful in 3m45s
CI / coverage-analysis (pull_request) Failing after 4s
CI / lint (push) Successful in 28s
Docs build and publish / docker (push) Successful in 8s
CI / test (3.11) (push) Canceled after 35s
CI / test-with-beamline-plugins (pxi_bec) (push) Canceled after 26s
CI / test (3.12) (push) Canceled after 31s
CI / test (3.13) (push) Canceled after 30s
CI / test-with-beamline-plugins (pxii_bec) (push) Canceled after 25s
CI / test-with-beamline-plugins (pxiii_bec) (push) Canceled after 21s
CI / test-with-coverage (push) Canceled after 20s
CI / coverage-analysis (push) Canceled after 0s
Build and Publish / release (push) Successful in 21s
2026-08-12 16:04:21 +02:00
perl_d 63ea060fb9 fix: rename recover beamline to force maintenance
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Successful in 1m21s
CI / test (3.13) (pull_request) Successful in 1m18s
CI / test (3.12) (pull_request) Successful in 1m28s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 2m11s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 2m20s
CI / test (3.11) (pull_request) Successful in 3m13s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 3m4s
CI / test-with-coverage (pull_request) Successful in 4m16s
CI / coverage-analysis (pull_request) Failing after 5s
2026-08-12 15:36:01 +02:00
perl_d 362880ec82 fix: rename free beamline to clear busy
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
2026-08-12 15:29:41 +02:00
perl_d 1b3b144265 refactor: remove dead code
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
2026-08-12 15:20:11 +02:00
semantic-release b341780232 0.8.2
Docs build and publish / docker (push) Successful in 3s
Build and Publish / release (push) Successful in 13s
CI / lint (push) Successful in 1m16s
CI / test (3.13) (push) Successful in 1m20s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m25s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 1m32s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 1m49s
CI / test (3.12) (push) Successful in 1m58s
CI / test-with-coverage (push) Successful in 1m52s
CI / coverage-analysis (push) Skipped
CI / test (3.11) (push) Successful in 2m27s
Automatically generated by python-semantic-release
v0.8.2
2026-08-12 08:26:09 +00:00
duan_j 23ad11430b chore: removing trailing space
CI / lint (push) Canceled after 34s
CI / test (3.12) (pull_request) Successful in 1m19s
CI / test (3.13) (pull_request) Successful in 1m19s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m22s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m35s
CI / lint (pull_request) Successful in 2m6s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m53s
CI / test (3.11) (pull_request) Successful in 2m12s
CI / test-with-coverage (pull_request) Successful in 2m22s
CI / coverage-analysis (pull_request) Successful in 3s
Docs build and publish / docker (push) Successful in 4s
CI / test-with-beamline-plugins (pxi_bec) (push) Canceled after 24s
CI / test-with-beamline-plugins (pxii_bec) (push) Canceled after 21s
CI / test (3.11) (push) Canceled after 31s
CI / test (3.12) (push) Canceled after 29s
CI / test (3.13) (push) Canceled after 26s
CI / test-with-beamline-plugins (pxiii_bec) (push) Canceled after 19s
CI / test-with-coverage (push) Canceled after 16s
CI / coverage-analysis (push) Canceled after 0s
Build and Publish / release (push) Successful in 15s
2026-08-12 10:20:03 +02:00
duan_j bb35209be8 chore: fix linting
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / test (3.13) (pull_request) Successful in 1m19s
CI / test (3.12) (pull_request) Successful in 1m19s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m22s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m32s
CI / lint (pull_request) Failing after 2m26s
CI / test (3.11) (pull_request) Successful in 3m6s
CI / test-with-coverage (pull_request) Successful in 3m30s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 3m38s
CI / coverage-analysis (pull_request) Successful in 4s
2026-08-12 10:15:00 +02:00
duan_j 328a46b09c chore: hide debug log in the log_panel
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Failing after 1m14s
CI / test (3.13) (pull_request) Successful in 1m25s
CI / test-with-coverage (pull_request) Successful in 1m53s
CI / coverage-analysis (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Canceled after 3m5s
CI / test (3.12) (pull_request) Canceled after 3m0s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Canceled after 2m55s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Canceled after 2m55s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Canceled after 2m50s
2026-08-12 10:11:54 +02:00
duan_j 8a9f35ef74 chore: make default theme bluebird (solid)
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Successful in 40s
CI / test (3.13) (pull_request) Successful in 1m26s
CI / test (3.12) (pull_request) Successful in 1m27s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m28s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m39s
CI / test (3.11) (pull_request) Successful in 2m12s
CI / test-with-coverage (pull_request) Successful in 2m4s
CI / coverage-analysis (pull_request) Successful in 5s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 2m59s
2026-08-11 16:03:58 +02:00
duan_j 9906937525 chore: add test to improve coverage
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / test (3.12) (pull_request) Successful in 1m27s
CI / lint (pull_request) Successful in 1m37s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m25s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m29s
CI / test (3.13) (pull_request) Successful in 1m59s
CI / test-with-coverage (pull_request) Successful in 2m0s
CI / test (3.11) (pull_request) Successful in 2m21s
CI / coverage-analysis (pull_request) Successful in 4s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Canceled after 2m23s
2026-08-11 16:00:58 +02:00
duan_j 17bb65420f chore: formatting, tab space misused
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Successful in 1m2s
CI / test (3.11) (pull_request) Successful in 1m24s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m28s
CI / test (3.12) (pull_request) Successful in 1m36s
CI / test (3.13) (pull_request) Successful in 1m51s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m48s
CI / test-with-coverage (pull_request) Successful in 1m56s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 2m0s
CI / coverage-analysis (pull_request) Failing after 3s
2026-08-11 14:48:24 +02:00
duan_j 0ca968277c chore: stop logger info display lots of pgroups
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Failing after 25s
CI / test (3.11) (pull_request) Failing after 37s
CI / test (3.13) (pull_request) Failing after 36s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Failing after 53s
CI / test (3.12) (pull_request) Failing after 1m0s
CI / test-with-coverage (pull_request) Failing after 51s
CI / coverage-analysis (pull_request) Skipped
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Failing after 58s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Failing after 59s
2026-08-11 14:37:21 +02:00
duan_j 34c8182cfa fix: allow str has no get when in recovery
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
2026-08-11 14:23:43 +02:00
duan_j ca05748d1f fix: include graphics to wheel 2026-08-11 14:23:43 +02:00
semantic-release 4b9ee0c414 0.8.1
CI / lint (push) Successful in 41s
Docs build and publish / docker (push) Successful in 7s
Build and Publish / release (push) Successful in 10s
CI / test (3.11) (push) Successful in 1m22s
CI / test (3.12) (push) Successful in 1m24s
CI / test (3.13) (push) Successful in 1m24s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m31s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 1m33s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 1m45s
CI / test-with-coverage (push) Successful in 2m7s
CI / coverage-analysis (push) Skipped
Automatically generated by python-semantic-release
v0.8.1
2026-08-11 11:42:13 +00:00
perl_d 110bfb3f5f fix: allow workflow dispatch of release wf
CI / lint (pull_request) Successful in 38s
CI / test (3.11) (pull_request) Successful in 1m23s
CI / test (3.12) (pull_request) Successful in 1m22s
CI / test (3.13) (pull_request) Successful in 1m23s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m27s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m32s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m41s
CI / test-with-coverage (pull_request) Successful in 2m8s
CI / lint (push) Successful in 34s
Docs build and publish / docker (push) Successful in 6s
Build and Publish / release (push) Successful in 12s
CI / test (3.13) (push) Canceled after 1m15s
CI / test (3.11) (push) Canceled after 1m20s
CI / test (3.12) (push) Canceled after 1m15s
CI / test-with-beamline-plugins (pxi_bec) (push) Canceled after 1m10s
CI / test-with-beamline-plugins (pxii_bec) (push) Canceled after 1m10s
CI / test-with-beamline-plugins (pxiii_bec) (push) Canceled after 56s
CI / test-with-coverage (push) Canceled after 45s
CI / coverage-analysis (push) Canceled after 0s
CI / coverage-analysis (pull_request) Successful in 6s
2026-08-11 13:38:48 +02:00
semantic-release 296bc98bbb 0.8.0
CI / lint (push) Skipped
CI / test (3.11) (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
Docs build and publish / docker (push) Successful in 8s
CI / test-with-coverage (push) Successful in 2m7s
CI / coverage-analysis (push) Skipped
Build and Publish / release (push) Successful in 6s
Automatically generated by python-semantic-release
v0.8.0
2026-08-11 11:08:06 +00:00
perl_d 7a60b7d932 fix: reset connection state if cancel fails
CI / test (3.11) (pull_request) Successful in 1m25s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m24s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m33s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m50s
CI / test-with-coverage (pull_request) Successful in 1m49s
CI / lint (pull_request) Successful in 2m11s
CI / coverage-analysis (pull_request) Successful in 3s
CI / test (3.13) (pull_request) Successful in 2m35s
CI / test (3.12) (pull_request) Successful in 2m45s
CI / lint (push) Successful in 29s
Docs build and publish / docker (push) Successful in 10s
CI / test (3.11) (push) Canceled after 36s
CI / test (3.12) (push) Canceled after 33s
CI / test (3.13) (push) Canceled after 31s
CI / test-with-beamline-plugins (pxi_bec) (push) Canceled after 28s
CI / test-with-beamline-plugins (pxii_bec) (push) Canceled after 26s
CI / test-with-beamline-plugins (pxiii_bec) (push) Canceled after 23s
CI / test-with-coverage (push) Canceled after 21s
CI / coverage-analysis (push) Canceled after 0s
Build and Publish / release (push) Failing after 4s
2026-08-11 13:02:54 +02:00
perl_d 8a51eef4f0 feat: lazily init jfj client 2026-08-11 13:02:54 +02:00
semantic-release aade051074 0.8.0
CI / lint (push) Successful in 28s
Docs build and publish / docker (push) Successful in 8s
Build and Publish / release (push) Successful in 11s
CI / test (3.11) (push) Successful in 1m28s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m29s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 2m9s
CI / test (3.13) (push) Successful in 2m57s
CI / test (3.12) (push) Successful in 3m5s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 3m19s
CI / test-with-coverage (push) Successful in 3m37s
CI / coverage-analysis (push) Skipped
Automatically generated by python-semantic-release
2026-08-11 09:03:07 +00:00
duan_jandClaude Fable 5 833a6d136f style: visual and interaction polish
CI / test (3.11) (pull_request) Successful in 1m23s
CI / test (3.12) (pull_request) Successful in 1m22s
CI / test (3.13) (pull_request) Successful in 1m21s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m26s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m42s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Successful in 1m40s
CI / test-with-coverage (pull_request) Successful in 2m2s
CI / coverage-analysis (pull_request) Successful in 4s
CI / lint (pull_request) Successful in 2m37s
CI / lint (push) Successful in 29s
Docs build and publish / docker (push) Successful in 12s
CI / test (3.11) (push) Canceled after 34s
CI / test (3.12) (push) Canceled after 30s
CI / test (3.13) (push) Canceled after 29s
CI / test-with-beamline-plugins (pxi_bec) (push) Canceled after 25s
CI / test-with-coverage (push) Canceled after 19s
CI / test-with-beamline-plugins (pxii_bec) (push) Canceled after 24s
CI / test-with-beamline-plugins (pxiii_bec) (push) Canceled after 20s
CI / coverage-analysis (push) Canceled after 0s
Build and Publish / release (push) Failing after 5s
Windowed startup at 50%x70% instead of maximized; overlay legend now
defaults off (it covers the camera image); square slider handles with
grip-line PNG assets (the round handle clipped flat); warmer sunrise
gradient bottom; abr/beam-mark layout tweaks; hover cues on the
beamline-state entries; DPI/font-aware pop-out titlebar icons; the
out-of-date Tutorial menu entries are hidden until content is redone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 b08817024d feat: reference-tools position column and state-driven default sample tab
The reference table gets a display-only '#' column (like the Dewar
list) with sort indices shifted around it; the sample dock switches to
the Auxiliary puck tab on entering alignment/maintenance states and
back to Dewar elsewhere, only on state transitions so a manual choice
sticks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 7b30c959a2 fix: dark-mode legibility for the status bar, sample tables, and surfaces
Status-bar flags get status_colors(theme) (Mocha variants on Sunset) via
a new set_theme; sample tables stop hard-filling rows WHITE and pin dark
ink on tinted rows via ForegroundRole; dewar tab and log panel get solid
dark surfaces (transparent renders black on the non-composited X11
container); developer help cards go square for the same reason.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 e77dfb4716 refactor: shared busy-badge renderer for camera and axis video views
draw_busy_badge in busy_overlay renders the title+subtext pill once;
the sample camera and axis video overlays both delegate to it instead
of keeping diverging copies. The axis panel's dot+label status pill and
its per-theme QSS go away with it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 1f2a538959 feat: float alert banners over content as anchored toasts
Banners in the root layout shifted the whole UI on every message; now
they float over the content root (repositioned on resize) and the baton
toast anchors as a compact pill under the camera view, auto-clearing in
4s instead of 10s.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 e457236777 feat: merge Automation progress and Console log into one Information dock
The two tabified bottom docks left their switcher tabs stranded at the
window bottom; one Information dock with proper tabs mirrors the Sample
List dock's layout. LogDock becomes the LogPanel widget with mirror
views for the pop-out and a reveal_requested signal so the owner
controls visibility (Ctrl+Shift+L, notifications).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 7b4764e7ca test: cover the camera overlays, theme migration, layout heal, and splash
Diff coverage vs main was 77%, under the 80% CI gate; the new camera
help/error/badge code and the theme+layout main_window paths were the
uncovered bulk. Locally: 82%.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 cd4b62323c style: swap the splash banner text to the white variant
Copied from aare_banner_w.svg; the black glyphs vanished on the dark
splash panel, the white fills read on it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 763a25837c style: narrow the manual-resize press state for the pyright gate
The diff-vs-main basedpyright gate flags QRect(self._press_geom) because
only _press_global was narrowed; both are set together in
mousePressEvent, so the extra check is a no-op at runtime.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 27c9b93d5c docs: note the spreadsheet log-spam TODO in daq_worker
load_spreadsheet/load_reference_tools log a GET they never send every
~12.5s poll while base_url is None; fix later by demoting to debug or
logging once on the None->set edge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 3a7f1f584a fix: heal poisoned all-docks-hidden layout and restore layout before watch-only close
A window state saved during the watch-only fold restores as every dock
hidden (the vanished-Sample-List-on-restart bug). Fall back to the
default layout when a restore comes back all-hidden, and put the
pre-watch layout back before saving state in closeEvent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 3db8b11dd1 feat: camera help overlay, camera-error message, and session badge hover feedback
The controls cheatsheet gets its own help badge/overlay instead of
riding the detection legend; the camera-unavailable state now draws the
actual error reason bottom-center (pushed from MainWindow to all three
camera views); the session badge shows hover feedback and the vacant
overlay reads 'In viewing mode' with a grab-baton hint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 c13ea11430 feat: rename themes to sunrise/sunset, add bluebird theme with Catppuccin-Latte light palette
Sunrise/sunset replace the original/portrait tokens (QSettings values
migrate on restore); bluebird is sunrise with a flat sky. The light
palette is repainted with Catppuccin Latte across alerts, chips, cards,
log, splash, inputs, and status flags, plus button/input height caps
and hover rules in the QSS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 4ef2ad64d7 style: clear the basedpyright gate for the new-code lines
Narrow QApplication.instance() before use, wrap the theme QSettings
read in str(), hand QPropertyAnimation a real QByteArray, and declare
the lazily-set watch-mode attributes on the class.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 0b696a56f0 style: cool the sunset gradient base
The warm glow at the bottom of the dusk sky didn't fit — stay in the
blue range.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 546fb5d3f0 test: inline smoke check for the wheel guard
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 f7194ca3a4 style: small panel polish
Energy unit moves from spinbox suffix to the label (the suffix ate
field width next to the new spin arrows); samcam exposure/gain get a
3:2 stretch so 3-decimal exposure isn't cut; the Exp. Config. tab bar
gets a BANNER_TAB_GAP spacer under its banner.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 c179ea992c style: relabel theme entries, tuck prototype views into the View menu
Legacy/Portrait themes become Sunrise (default)/Sunset. Automation View
and Portrait (now Playlist) Mode leave the menubar for the View menu
with in-progress labels; Return to Main View stays top-level since it
only shows inside the automation view.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:55 +02:00
duan_jandClaude Fable 5 7f838f4b98 fix: opaque faces for floating windows and theme-aware pop-out icons
A transparent top-level renders black on the container's non-composited
X11, so floating docks get a dynamic floating property feeding the
QSS [floating="true"] opaque face, and PopoutWindow sets
WA_StyledBackground. Pop-out titlebar glyphs are now painted in the
palette's WindowText color and re-tint on PaletteChange, so they stay
visible after a theme flip.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 d127863b1f feat: hide operation panels in watch-only mode
Without the baton the GUI now shows only the camera stream and status
bar; every operating surface (panels, docks, pop-out mirrors) is hidden
outright. Regaining the baton restores dock layout via saveState/
restoreState — per-dock visibility snapshots lose docks tabbed behind
others — so LogDock gains the objectName restoreState requires.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 f9a6c7bc31 feat: rest-to-reveal hint for dock separators
Separators stay invisible until the mouse rests on one for ~1s (or a
drag starts); the QSS ::separator:hover rule does the hit-testing and a
dynamic separatorHint property gates it, so event() never needs to know
where separators are.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 257edc25f8 feat: pointing-hand cursor on all interactive widgets
QSS cannot set cursors and per-widget setCursor calls get forgotten as
widgets are added, so an app-level filter catches every Polish event on
buttons, combos, and sliders — dialogs and pop-outs included.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 ed8b2bd165 feat: cross-fade and palette flip on theme switch
Freeze the old look in a click-through screenshot overlay and fade it
out over the restyled window — QSS has no transitions and animating the
palette would re-polish every widget per frame. Sunset also flips the
app-palette text roles so native primitives QSS can't recolor (spin and
combo arrow glyphs) follow the theme.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 7801025802 feat: theme-aware beamline state panel
The panel paints availability/message colors in code per DAQ tick, so
QSS can't retint it — state_colors(theme) hands it a per-theme dict
(Catppuccin Mocha inks for Sunset) and _apply_theme pushes theme flips.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 1946430f0d feat: dusk-gradient theme overhaul with transparent-widget scheme
Both stylesheets move to transparent children over a gradient painted
only by top-level windows; inputs, buttons, headers, and menus get
opaque faces back. Sunset drops Catppuccin Macchiato for the Daemmerung
dusk palette. Spin/combo arrows and check indicators become theme-tinted
PNGs. Widgets stop carrying inline input/text stylesheets so the theme
QSS can win (empty stylesheet = theme reset).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 900315d412 feat: add spin-arrow and check-mark glyph assets
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 2adf8ff6d5 style: narrow the log pop-out view for the pyright gate
The Optional _popout_view is assert-narrowed once after opening; the
unguarded accesses were the last three diff-gate violations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 69b6813025 test: cover the sample-status logic, wheel guard, pop-outs, and log mirror
New tests for what the port added: status tint priority and
context-dependent chip filters on the dewar/queue model, the
right-button wheel guard (motor protection), PopoutWindow edge maths,
manual-resize fallback, close-hides behavior and DockTitleBar, the
chip drag-drop relabeling, and the console-log pop-out mirror. The
widgets' __main__ self-checks are superseded by these and removed.
Brings PR diff coverage from 70% to 81% (gate: 80%).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 ed42738693 style: clear the two portrait-mode diff-gate violations
The sample-name labels are created in __init__ now (the build helper
only styles and mounts them) so reportUninitializedInstanceVariable
stops firing on the ported styling lines, and the queue placeholder
uses the scoped Qt.AlignmentFlag.AlignCenter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00
duan_jandClaude Fable 5 2638308412 style: ruff-format the ported round, scope splash Qt enums
The sandbox port was ruff-check clean but not ruff-format clean (CI
formats before linting); splash_screen's alignment flags move to the
scoped enum since the port put that line into the diff gate's scope.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:35:54 +02:00