CI / lint (pull_request) Successful in 34s
CI / test (3.12) (pull_request) Successful in 22s
CI / test (3.13) (pull_request) Successful in 30s
CI / test (3.11) (pull_request) Successful in 35s
CI / lint (push) Canceled after 10s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / test (3.13) (push) Canceled after 0s
Build and Publish / release (push) Successful in 11s
DataCollectionParameters.transmission was the outlier: int percent 0-100 while BeamlineStatus / SimpleScanParameters / FluorescenceSpectrum already used a 0-1 fraction. Per the DAQ/DB consensus it is now a strict Annotated[float, Field(ge=0.0, le=1.0)] fraction (1.0 = full beam); percent-scale values in (1.0, 100.0] fail validation by design instead of being silently reinterpreted. RotationScanRequest / RasterGridRequest gain the same constraint (production data is already fraction on those paths). Human-facing surfaces (user spreadsheets, AareDB public API) stay percent; their converters live in AareDB at the boundary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HiGzkkuiZXei894cnJfgSg