diff --git a/CHANGELOG.md b/CHANGELOG.md index b709f4f3..ac2028e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,254 @@ # CHANGELOG +## v0.9.0 (2026-08-17) + +### Bug Fixes + +- Busy flag in Axis views as plain status text, not a badge + ([`69d552c`](https://gitea.psi.ch/mx/AareDAQ/commit/69d552c0683a1c7b7768c9491b78130cf52a1330)) + +Gonio camera, Beamline view and the combined view showed BEAMLINE BUSY in the rounded badge pill, + which reads as a clickable button. These views are passive, so draw the same shadowed colored text + the sample camera uses for its warnings; the pill stays only on the sample-camera session badges, + which really are click targets. + +Co-Authored-By: Claude Fable 5 + +- Clear basedpyright diff violations + ([`5871c95`](https://gitea.psi.ch/mx/AareDAQ/commit/5871c959e22f9399430195ba2a1d41b9dc16c662)) + +Rename NumberLineEdit.validator to range_validator: the instance attr shadowed QLineEdit.validator() + and broke type checking at call sites. Annotate the smargon _move_axes dict and cast the stand-in + self in the prediction subscriber test. + +Co-Authored-By: Claude Fable 5 + +- Explain gated Beamline tab clicks; drop login state POST + ([`6c720d2`](https://gitea.psi.ch/mx/AareDAQ/commit/6c720d29d328563ca186be6af71e17c458ce824e)) + +Two changes folded together because they touch the same status path: + +- Revert the login-default state POST: a state transition can move motors, and merely opening the + GUI must never move hardware. The GUI now adopts whatever state the server reports. - A click on + the pgroup-gated (disabled) Beamline tab used to be eaten silently by the tab bar. An event filter + now pops the explanation: visitor-pgroup wording for staff, the staff-only message for users (same + pattern as the Auxiliary-puck tab). + +Co-Authored-By: Claude Fable 5 + +- Exposure wheel only increased when Alt held + ([`ac5936f`](https://gitea.psi.ch/mx/AareDAQ/commit/ac5936f7be272e956a937ecf164b3ce28bb53680)) + +Qt xcb/windows swap wheel axes while Alt is held, so angleDelta().y() is 0 and copysign(_, 0) is + always positive. Fall back to angleDelta().x() and ignore genuine zero deltas. + +Co-Authored-By: Claude Fable 5 + +- Grey out whole state strip while beamline is busy + ([`d659f05`](https://gitea.psi.ch/mx/AareDAQ/commit/d659f0500934e462ea195d09d7234fe1213a659a)) + +Busy now empties the available-target set exactly like Moving, so no entry looks clickable and no + transition can be posted mid-operation (same guard the status-bar menu already had). The + current/pending entry keeps its highlight as orientation. + +Co-Authored-By: Claude Fable 5 + +- Install gate event filters after eventFilter's targets exist + ([`190e728`](https://gitea.psi.ch/mx/AareDAQ/commit/190e728734559a22fe1155cf3932c9c7ed0cb528)) + +The locked-banner and Beamline-tab-bar filters were installed mid __init__, but + MainWindow.eventFilter reads sample_lists_tabs, which is created later - every event delivered in + between raised AttributeError inside the filter ('Error calling Python override of eventFilter()' + spam) and broke widget teardown, cascading errors across CI tests and wedging the pxiii_bec job. + Filters now install late, next to installEventFilter(self), and the filter guards its attribute + reads so construction/teardown-time events can never raise. + +Also fold the staff-gate assertions into test_main_window_init: every extra MainWindow construction + raises the odds of the pre-existing PySide SystemError flake, so don't build a window just for + them. + +Co-Authored-By: Claude Fable 5 + +- Prevent libzmq abort and per-frame decode errors in prediction subscriber + ([`6917894`](https://gitea.psi.ch/mx/AareDAQ/commit/69178945e5b64e73413169056673714a3db2d8cf)) + +Sniff for '{' before JSON-parsing zmq parts: JPEG frames start with 0xff and raised + UnicodeDecodeError on every frame. Stop closing the socket from the GUI thread in stop(): zmq + sockets are not thread-safe and the concurrent close/recv tripped the signaler.cpp POLLIN + assertion (core dump); run() closes it in its own thread via the 500ms RCVTIMEO. + +uv.lock: sync version to 0.8.3. + +Co-Authored-By: Claude Fable 5 + +- Reserve sign width for GM labels; annotate red-highlight mismatch + ([`c837e6c`](https://gitea.psi.ch/mx/AareDAQ/commit/c837e6c44d26f96477a72753b7123805878803c7)) + +Value column was content-sized, so rows shifted whenever a value flipped negative. Labels now + reserve '-88.888' width; right alignment keeps digits anchored. Also TODO: red colors on live + aerotech while labels display aerotech_meas - intent unconfirmed, do not change condition until + decided. + +Co-Authored-By: Claude Fable 5 + +- Send light slider changes from every input path, guard readback + ([`869a66f`](https://gitea.psi.ch/mx/AareDAQ/commit/869a66ff4b7c51133609ff7f4d5eb8d70fdbf85a)) + +Sliders only emitted on sliderReleased, so right-click+wheel, arrow keys and groove clicks changed + the value locally without a PUT and the 500 ms status poll snapped it back. setTracking(False) + + valueChanged now sends one PUT per deliberate change; readback setValue is wrapped in blockSignals + to avoid echoing PUTs, and a 1.5 s grace window stops in-flight stale status responses from + bouncing the slider. + +Co-Authored-By: Claude Fable 5 + +- Unsqueeze Chi/Phi row and widen Step box in smargon panel + ([`70107e6`](https://gitea.psi.ch/mx/AareDAQ/commit/70107e6219aa25ce6736fb7af04894ecc355fe10)) + +Move button gets its own full-width row instead of sharing row 1 with the Chi/Phi entries; Step box + spans columns 1-4 instead of the narrow Chi column. + +Co-Authored-By: Claude Fable 5 + +### Chores + +- Name the bluebird theme in menu the default theme + ([`63f4ad7`](https://gitea.psi.ch/mx/AareDAQ/commit/63f4ad7612e87554aa3bdb92edbedeeeee81a7d2)) + +- Rename Beamline Setup to Beamline setup, comment tweaks + ([`75d7bed`](https://gitea.psi.ch/mx/AareDAQ/commit/75d7bed380b8ababd876b86335079648ca05b51e)) + +Panel title case now matches the other banner names. Also clarify the splash banner comment in + gui.py. + +Co-Authored-By: Claude Fable 5 + +- Satisfy ruff format and SIM201 lint + ([`b489610`](https://gitea.psi.ch/mx/AareDAQ/commit/b4896105ab529e62374f6f11b0424a8cc54c7d30)) + +ruff format collapsed lines the Beamline setup rename and other edits left splittable; SIM201 wanted + != over 'not ... ==' in the prediction subscriber's JSON sniff. + +Co-Authored-By: Claude Fable 5 + +- Specify the omega panel 0 degree is a go-to not a move-by + ([`b8177bd`](https://gitea.psi.ch/mx/AareDAQ/commit/b8177bd764b584a09ab925dedeff811b69ec4d66)) + +- Use rock and goto for better understanding + ([`252e083`](https://gitea.psi.ch/mx/AareDAQ/commit/252e08384dd69955f0e53151445e24a62e19a4ce)) + +- Using aare_banner.png since svg could be rendered wrong at rhel9 consoles + ([`d94fb88`](https://gitea.psi.ch/mx/AareDAQ/commit/d94fb88148ad317f8cf7e44ca35ccc0c9eb6d184)) + +### Continuous Integration + +- Run pytest with -s -vv in the test jobs + ([`727f19d`](https://gitea.psi.ch/mx/AareDAQ/commit/727f19d52a3810a9ad7cf15cd07305b224359dae)) + +Per-test lines and live (uncaptured) output: the pxiii_bec job sat silent at 81 percent for hours, + and file-level dots could not say which test wedged. With -s -vv a hang names its test and streams + the last log lines before it. + +Co-Authored-By: Claude Fable 5 + +### Features + +- Add Change Energy row to experiment configuration + ([`c618354`](https://gitea.psi.ch/mx/AareDAQ/commit/c618354c0146e6a071873507aad4d085c71e344f)) + +Copy of the Beamline Setup energy row (keV display, eV emit), placed below the ML Loop Centring / + Make Raster Grid row and always visible. Wired to the same daq.change_energy; not staff-gated, + server enforces write permission. + +Co-Authored-By: Claude Fable 5 + +- Add More link in sample camera help overlay opening F1 dialog + ([`ebe0860`](https://gitea.psi.ch/mx/AareDAQ/commit/ebe0860ed4446d76005b00493ebf2c05aec5d93e)) + +Underlined 'More… (F1)' line at the bottom of the painted help box emits open_full_help, wired to + the existing Mouse / Keyboard Controls dialog. + +Co-Authored-By: Claude Fable 5 + +- Default beamline state on login by role + ([`656b441`](https://gitea.psi.ch/mx/AareDAQ/commit/656b44159322c857ef6f6a2a0623a5e0cbf8792b)) + +Staff land in BeamLocation, users in SampleAlignment. One-shot on the first status tick where the + GUI owns the session and the beamline is idle, so a running operation or a watch-only GUI is never + disturbed. + +Co-Authored-By: Claude Fable 5 + +- Disable Beamline tab when active pgroup is outside token pgroups + ([`c5a6a17`](https://gitea.psi.ch/mx/AareDAQ/commit/c5a6a175bddda9acb517acea74ecf93776cae3cb)) + +Switching to a visitor pgroup means running a user experiment: grey out the Beamline tab (tooltip: + beamline scientists only), bring the Experiment tab forward with Dataset path and Exp. Config. + opened. Gate applies on transitions only so manual tab choices survive the 1 Hz status ticks. + +Co-Authored-By: Claude Fable 5 + +- Rename Monochromator panel to Beamline Setup, add WIP beam-to-box row + ([`bb447b1`](https://gitea.psi.ch/mx/AareDAQ/commit/bb447b15670addb7fb339db41690abbe21b7533a)) + +Display title only; class and file keep their names. New full-width 'Move Beam to Box (center) + (WIP)' button under the Energy row, disabled with a coming-soon tooltip until a DAQ endpoint + exists. + +Co-Authored-By: Claude Fable 5 + +- Show locked beamline banners to non-staff + ([`1bce76e`](https://gitea.psi.ch/mx/AareDAQ/commit/1bce76e6fcd0c430cee449e82679cc36c946b414)) + +Beamline setup, ABR meas. pos. and Beam configuration banners stay visible for non-staff instead of + vanishing, but are locked stand-ins: clicking one pops the staff-only notice (same pattern as the + Auxiliary-puck tab) telling the user to log in as staff or contact their local contact. + +Co-Authored-By: Claude Fable 5 + +- Stage motor entry values, apply moves in one click + ([`e18c7fe`](https://gitea.psi.ch/mx/AareDAQ/commit/e18c7feded837db8d26d20ee021b58057137cc5d)) + +Chi/Phi boxes in the Smargon tab no longer move on Enter: edits stage the target (orange), the Move + button sends all staged axes at once (green), and boxes return to neutral when the motor reports + arrival. Out-of-range entries stay red and are never sent; limit tips pop as tooltips. + MotorMoveGroup is opt-in per box so other panels can adopt the same logic later. + +Co-Authored-By: Claude Fable 5 + +- Switch to Beamline combined view while busy + ([`58bde93`](https://gitea.psi.ch/mx/AareDAQ/commit/58bde9379bd09b6c22bf0409b829894b753e59c9)) + +Generalize the robot-mount auto-switch: any busy period now brings up the combined view so the + motion can be watched, and the sample camera returns when busy clears. Edge-triggered, so manual + tab choices survive between transitions; _mounting renamed to _watching_motion. + +Co-Authored-By: Claude Fable 5 + +### Testing + +- Cover every changed line in the branch diff + ([`aa6c226`](https://gitea.psi.ch/mx/AareDAQ/commit/aa6c226103401234b371f26727c5b544aa686329)) + +Diff coverage vs main now 100 percent from the gui suite alone: non-staff locked banners and both + gated-tab popups, remote-close bookkeeping in update_daq_status, smargon staged moves, camera More + link and Alt-wheel axis fallback, number box relimits, energy row emit, and the gui.main() + banner/graceful-exit path. + +Co-Authored-By: Claude Fable 5 + +- Lift diff coverage over the 80 percent gate + ([`16e112f`](https://gitea.psi.ch/mx/AareDAQ/commit/16e112f44a4eac6024e94d359c17a9704e78a2a8)) + +Promote the illumination panel's __main__ self-check to a real pytest file so CI counts it, add + busy-overlay render checks (status text paints, video view routes through it), and cover the motor + group's incomplete-entry and below-min Enter paths. Local diff coverage from the gui suite alone: + 82 percent. + +Co-Authored-By: Claude Fable 5 + + ## v0.8.3 (2026-08-12) ### Bug Fixes diff --git a/pyproject.toml b/pyproject.toml index a7186ce4..ead5fe74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "aaredaq" -version = "0.8.3" +version = "0.9.0" description = "AareDAQ (with GUI)" readme = "README.md" requires-python = ">=3.11"