- fix: spine
~/haltandmove_absolutecancel did not stop the carriage.
halt_motion()posted to/spine/api/motion:halt, which the device does
not implement (404). It now usesmotion:quick-stop, re-arms to
SwitchedOnafter the DS402 stop, overlaps halt and feedback with the
blockingmotion-mm:starton one HTTP client, and does not report a goal
canceled when halt fails. - fix: spine
http_timeout(default 3 s) is only the connect timeout and the
budget for short REST.motion-mm:startuses(http_timeout, 600 s)so
a long move is not aborted by the short read; the motion lock stays held
until that POST returns. - refactor: spine REST wire strings live in
SpineStatus(DS402 states) and
SpineMotion(Finished). - fix:
move_absoluteno longer surfaces HTTP 424 when the spine is not
SwitchedOn. It checks state first and reports e.g.
Cannot start motion: spine is SwitchedOff (expected SwitchedOn).