Since Kinetic Control can measure Spindle RPM, why isn’t more being done to detect or even prevent stalls?

The first and easiest step that I could see Penta adopting, would be to detect a stall when RPM<N (where N could be 500 for example) and when this state is detected, have a set of actions that the user could toggle on/off, eg:
- Halt X, Y, Z (ie pause, like pressing the green button).
- Go back a few lines of gcode (hopefully backing the tool into free space).
- Stop spindle (turn off power to spindle).
- Kill power to all steppers (like hitting the red button, though this removes any chance of resuming).
- Sound alarm/play tone/popup notification/etc.
Implementing these steps could prevent tool breakages, prevent mis-calibration of the machine and/or burnout from steppers trying to drive but not achieving any motion and the associated twisting this generates, save parts and so on. If done right, the user could even be left with the option of reducing the feedrate and continuing the machining. Since stalling the Pocket NC is so easy, this change would be of massive value to everyone.
I would like to add that even after dialling in feeds and speeds for a particular machining operation/part, stalls will come eventually as the tool wears, and can come completely out of the blue when machining aluminium if the material decides to randomly gum up the tool. So this really is needed.
The next stage of stall prevention could utilise spindle power measurements (not currently working or maybe not available in kinetic control, even though it’s on the UI?). There are 3 options that I’d implement if I could:
A) Information only, ie do nothing, which is the case currently, though I’d add a max record and reset button.
B) Pause if spindle power draw>P (where P might be 150W by default, but user settable).
C) Automatically reduce feedrate.
Option B is the safest and allows the user unlimited time to consider their tool paths, DOC, WOC, feeds and so on, with the option of them manually lowering the feedrate and resuming. Option C is the hardest to get to the logic right for all users. Both B & C should kick in before stall detection, meaning the stall detection logic could still be active. Since I’ve done a fair bit of coding in my time, and since I’ve spent a lot of time thinking about this, I don’t mind sharing some coding suggestions to show that it’s not actually difficult to implement.
The approach I’d take for option C is:
Calculate the new feedrate based on the spindle power draw, but if it’s >100%, then just use the gcode feedrate, otherwise lower the feedrate by the ratio of 100W/P. So if at some moment, P=105W, then the feedrate would be lowered to ~95%. If in the next loop, the power draw was still high at say 102W, then the new feedrate would be 95% * (100W/102W) = ~93%. Written as logic, it would look something like this:
If CurrentFeedrate*(100W/P) > GcodeFeedrate Then
CurrentFeedrate = GcodeFeedrate
Else CurrentFeedrate = CurrentFeedrate*(100W/P)