0.10.0
Docs build and publish / docker (push) Successful in 4s
Build and Publish / release (push) Successful in 7s
CI / lint (push) Successful in 1m6s
CI / test (3.13) (push) Successful in 1m3s
CI / test (3.11) (push) Successful in 1m24s
CI / test-with-beamline-plugins (pxii_bec) (push) Successful in 1m38s
CI / test-with-beamline-plugins (pxiii_bec) (push) Successful in 1m53s
CI / test-with-beamline-plugins (pxi_bec) (push) Successful in 2m8s
CI / test (3.12) (push) Successful in 1m52s
CI / test-with-coverage (push) Successful in 2m5s
CI / coverage-analysis (push) Skipped

Automatically generated by python-semantic-release
This commit is contained in:
semantic-release
2026-08-17 16:20:00 +00:00
parent e9428ca64d
commit 37bb25e705
2 changed files with 223 additions and 1 deletions
+222
View File
@@ -1,6 +1,228 @@
# CHANGELOG
## v0.10.0 (2026-08-17)
### Bug Fixes
- Measured threshold is rotation count >= 1
([`2909182`](https://gitea.psi.ch/mx/AareDAQ/commit/2909182bb104d96a5b2d44ae8bb33a5056a69d67))
Confirmed by Dawn: any rotation data counts as measured; unmeasured is exactly rotation count 0. The
old > 1 rule left single-rotation samples looking like still-to-do work in the Unmeasured view.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- No auto-switch to beamline view during Sample alignment
([`cb5837d`](https://gitea.psi.ch/mx/AareDAQ/commit/cb5837d90f03c02c56fd017f9eb714a2164e1753))
Busy in Sample alignment IS the alignment (centring moves) - yanking the view away to the combined
beamline tab hid exactly what the user was doing. The motion-watch switch now skips that state;
robot exchange and other busy transitions still switch as before.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Order sample count columns by workflow, unwire crossed columns
([`f303f29`](https://gitea.psi.ch/mx/AareDAQ/commit/f303f29214c780b9c97e360b598d6a849e2f7a14))
Both bottom-dock tables now list mount -> raster -> screening -> rotation, the order the work
actually happens in. In the Auxiliary table the swap also fixes a real bug: data() feeds get_entry
header-index-minus-1, but rotation/raster were crossed against the header, so 'Raster count'
displayed rotation counts and vice versa.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Pyright-style ignore for setGraphicsEffect(None)
([`03ae77f`](https://gitea.psi.ch/mx/AareDAQ/commit/03ae77fa749a216412dc23045f2660e840ae1b98))
basedpyright disables mypy-style 'type: ignore' comments by default, so the diff-quality gate still
counted the violation; match the existing 'pyright: ignore[reportArgumentType]' convention from
main_window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
### Chores
- Clarify move to mounting position in smargon movement
([`adcc63d`](https://gitea.psi.ch/mx/AareDAQ/commit/adcc63d45cfaf95357b86fd311d8b5c8a5d06b22))
### Code Style
- Expanded help overlay opens top center, under the badge
([`3053aaa`](https://gitea.psi.ch/mx/AareDAQ/commit/3053aaae9386bc108b429b036dab0b359a9446f1))
The '?' badge moved to the top middle but the cheat sheet still opened bottom-left, sending the
mouse across the view to close it. The overlay now drops in where the badge was.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Help badge at center top, More link right-aligned
([`a0baa2b`](https://gitea.psi.ch/mx/AareDAQ/commit/a0baa2b54dde762af27be62c7c15658728e797b6))
The '?' badge sat in a corner, which drifts oddly when the view is scaled to fit; the top middle
stays put and out of the sample's way. Transparency unchanged - visible enough to find, not
disturbing. 'More... (F1)' moves to the overlay's right edge, reading like a dialog's action
button.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Move Unmeasured next to All, 1px gap between filter chips
([`378c257`](https://gitea.psi.ch/mx/AareDAQ/commit/378c25799f9da4e393619439776d2e5af69d389e))
Unmeasured and All are both 'what is left' views; the hand-applied labels (Queued/Flagged/Measured)
follow. The 1px spacing keeps the chips readable as separate buttons instead of one solid bar.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Wrap shutter flag f-strings for ruff format
([`32a835b`](https://gitea.psi.ch/mx/AareDAQ/commit/32a835b6616425fca6b2a9444705212cc98a5b1c))
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
### Features
- Add Unflag to the sample table context menu
([`900bc2f`](https://gitea.psi.ch/mx/AareDAQ/commit/900bc2f6f7f9c58a8c45d123f5c9bfb70319cb5e))
Below Mount/Unmount, acting on the selection like the queue actions. Flagging happens by dropping
rows on the Flagged chip; until now there was no way back. Disabled when nothing in the selection
is flagged.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add Unmeasured filter chip to the sample table
([`4175cb8`](https://gitea.psi.ch/mx/AareDAQ/commit/4175cb8edfa6b732260d9a4f2c3f339216e9ba04))
Complement of Measured (rotation count <= 1): one click shows everything still to be done, so it can
be selected wholesale and queued. Plain chip like All - unmeasured rows carry no tint, so there is
no legend color to wear; cross-status marks (queued/ flagged) show like in the Measured view.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Breathe the pending transition target in the state strip
([`fbd40ee`](https://gitea.psi.ch/mx/AareDAQ/commit/fbd40eee90b96e517252a757c3e00e9af4902977))
While Moving, the target state sat solid blue and read as already reached. An opacity pulse
(QGraphicsOpacityEffect + QPropertyAnimation) marks it as in progress; a stylesheet animation
would repolish the button every frame, which the guarded updates in _apply_highlight exist to
avoid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Clicking the '#' header selects all rows
([`4a728ba`](https://gitea.psi.ch/mx/AareDAQ/commit/4a728baf79a9fa677e83ccb895a1689901b6ce23))
The status column holds no sortable data, so its header click slot was free: it now does Ctrl+A,
pairing with the Unmeasured chip to grab everything still to be done in one motion. The sort
indicator is put back afterwards - the click drags it onto '#' even though the model ignores
sorting there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Current energy readout in Exp. Config energy row
([`1fef282`](https://gitea.psi.ch/mx/AareDAQ/commit/1fef28231b707118f645e02f04ad3cf81e953349))
Mirrors the Beamline setup live readout above Set Energy, fed by the same DAQ tick with the
zero-energy guard and repaint skip.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fast shutter open/close row in Beamline setup
([`8f91f1e`](https://gitea.psi.ch/mx/AareDAQ/commit/8f91f1ed2ed1cbca04dcd00f761292b0108b19a7))
Status flag on the left (same rich-text scheme as the status bar, theme-aware via set_theme),
Open/Close buttons on the right, wired to the same daq.open_shutter/close_shutter slots
staff-gated in main_window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Live energy/wavelength readout in Beamline setup
([`2a82c59`](https://gitea.psi.ch/mx/AareDAQ/commit/2a82c598c0010a8d766cb781f31f0a4d85f09b2e))
New 'Current energy / lambda' row above the setpoint, fed per DAQ tick from diffraction.energy_keV;
the setpoint row is renamed 'Set Energy (keV)' so 'what is' and 'what to set' are distinct. Guards
energy 0.0 (server's detector-unavailable fallback) because the wavelength property divides by it.
The copied energy row in the experiment configuration is renamed to match.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Put the ExpHutch shutter left of the fast shutter
([`977483e`](https://gitea.psi.ch/mx/AareDAQ/commit/977483ef2843d56abe921fb8c6d999a130423c2e))
Beam-path order in the status bar: the hutch shutter sits upstream of the fast shutter, so it reads
left to right along the beam.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Queue controls live only in the Queued view
([`6ace1fc`](https://gitea.psi.ch/mx/AareDAQ/commit/6ace1fcbcfd8815f75c3d4498427050b35edc659))
Run/Remove selected/Clear list act on the queue, whose order only the Queued chip view shows - in
other views they are greyed out with a tooltip pointing at the chip. Run stays enabled while
automation runs so pausing is always possible. Applies to the docked trio and the pop-out clones
alike.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Queued chip view shows the actual run order
([`344888d`](https://gitea.psi.ch/mx/AareDAQ/commit/344888dac072090fcf33a751dfb330bd2094bee1))
The queue engine keeps insertion order and Run pops its head, but the Queued view sorted by the
dewar table's header sort - the top row was not what runs next. set_queued_ids now keeps the order
it is fed (the queue model's order) and the Queued view displays exactly that; header clicks no
longer reorder it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Sample camera starts in scale-to-fit
([`b58c23d`](https://gitea.psi.ch/mx/AareDAQ/commit/b58c23d0f65207a6ed15489fbcdeaa04acc2265a))
_autoscale now defaults on, so the view fits from the first layout (the constructor's placeholder
already carries the camera size and resizeEvent refits on every resize). update_pixmap
additionally refits when the frame size changes - the real stream resolution can differ from the
placeholder, and only a view resize refit before. Right-click 'Scale to fit' still toggles back to
1:1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Wave-animate the busy overlay titles
([`80063a5`](https://gitea.psi.ch/mx/AareDAQ/commit/80063a5df1c7c8b3c0c04aed6dfb5f160e477d47))
BEAMLINE BUSY and the robot warnings now hop per letter (clipped sine) so they read as an
in-progress signal, not a frozen label. Gated by a new BusyOverlayStyle.animate flag: 'In viewing
mode' stays static because it is a passive notice. No timer - the phase rides the wall clock and
repaints ride the ~20 fps camera frames, so the wave freezes with a stalled feed (which has its
own error surface).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
### Refactoring
- Replace Qt overrides with native mechanisms, install app filters once
([`c24da77`](https://gitea.psi.ch/mx/AareDAQ/commit/c24da7739b2f845094b875ad2943f0d736b66b3f))
Per-window installs of the two QApplication-level filters (cursor, wheel guard) stacked one stale
copy per MainWindow; now installed once per process, parented to the app. closeEvent overrides in
the baton dialogs replaced by finished.connect(timer.stop); keyPressEvent in VideoGraphicsView
replaced by WidgetShortcut QShortcuts; hover enter/leave overrides in PlayPauseButton replaced by
underMouse(); ValueLabel inherits ClickableLabel instead of duplicating its mousePressEvent. Dead
raster-timer branch and a PyQt5-era event-position fallback deleted; redundant try/except and
getattr guards dropped now that class-level defaults cover pre-init reads.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
### Testing
- Pin the Sample-alignment motion-watch exception
([`e9428ca`](https://gitea.psi.ch/mx/AareDAQ/commit/e9428ca64dece6f9a9c2be6fc5867c635b08449c))
Robot motion switches to the combined view; alignment beginning switches straight back while busy is
still set, and staying busy in alignment never re-triggers. Piggybacks on the init test's window -
extra MainWindow constructions feed the PySide teardown flake.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
## v0.9.0 (2026-08-17)
### Bug Fixes
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "aaredaq"
version = "0.9.0"
version = "0.10.0"
description = "AareDAQ (with GUI)"
readme = "README.md"
requires-python = ">=3.11"