Broker acquisition failure paths:
- Report a truncated writer output / missing packets as errors ahead of the
queue-full warning, so an incomplete dataset is no longer masked as a
"reduce frame rate" warning.
- Route PCIe/FPGA hardware faults to the Error state: make PCIeDeviceException a
JFJochCriticalException, and stop JFJochServices::Stop() from slicing the
caught exception (capture/rethrow via exception_ptr) so the critical type
survives to the state machine.
- Stop the (possibly partially-armed) detector, not just the receiver, when a
detector arm fails, so the next start does not see it BUSY.
- Return structured Error_message JSON for bind_json operation failures (e.g. a
failed synchronous /start), matching the no-arg endpoints.
rugnux CLI:
- Default -N to all hardware threads, resolved once after parsing so full
analysis, --azint-only and --scale behave the same.
- Parse numeric option arguments strictly (reject non-numeric input and trailing
garbage) instead of atof/stod, which silently yielded 0 or aborted the
process; require --wavelength > 0.
- Emit -R attached (-R100) in the reproduced command line so it re-parses.
- Compare the reference MTZ against the cell that actually drives the merge in
the --scale path.
- Correct the --scaling-high-resolution help text and de-duplicate the
offline-output experiment setup.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>