Hi,
the more I think about it the more I'm convinced that the problem you describe is not so much a fault as the way SoftLimits work, in fact have to work.
Lets say that your machine is 50mm inside the limit and yet your Gcode calls for another 60mm of movement, which would put it outside the limit.
If Mach were to attempt that move it would issue movement instructions in 1 millisecond time slices to the buffered motion controller, this is normal and how Mach operates.
However when 50mm of movement has occurred then its on the limit, so now the machine would have to decelerate to a stop. But what about those 1ms time slices that
are still in the buffer? If you abort them (like you would with a Limit switch event or an Estop) then you lose reference, because Mach does not know how many time slices
nor how much movement those times slices represent. So even if Mach did the clever thing and decelerated to a stop it wouldn't make any difference the machine would still
lose Reference....which sort of defeats the purpose of SoftLimits.
I can only conclude that Mach would just refuse to enact (ie just ignore) the last movement instruction that would cause it to go out of bounds. In which case it would stop
and the end of the previous instruction, say 50mm still short!
Craig