Progress
An immutable snapshot of an operation's progress: a fraction and an optional phase label.
Holding both values in one snapshot lets a collector render a fraction and a label that belong to the same report. Equality is by value. StateFlow conflates on equals, so reporting an equal progress twice wakes no collectors.
The constructor never throws. An out-of-range fraction is clamped into 0..1, and NaN becomes indeterminate.