QUAD_GANTRY_LEVEL probe failure during print job does not trigger shutdown, continues moving after error

Basic Information:

Printer Model: Voron 2.4
MCU / Printerboard: Manta M8p
Host / SBC: cm4
klippy.log
klippy.log.zip (1.6 MB)

Describe your issue:

When running QUAD_GANTRY_LEVEL as part of a print job, a probe failure (e.g. “No trigger on probe after full movement”) does not cause a printer shutdown. Instead, Klipper exits the SD print job (Exiting SD card print (position 0)) which seems to trigger the CANCEL_PRINT macro after the failure.

This is unexpected and potentially dangerous behavior, as continued movement after a failed probe can cause crashes or damage. (Which has happened in my case.)

Steps to Reproduce

  1. Add QUAD_GANTRY_LEVEL as part of an SD card print start macro or print start sequence.

  2. Position the bed or probe so that one of the four probe points in QGL will fail (e.g., bed too low to trigger the probe).

  3. Start the print job.

  4. Observe the probe failure and resulting behavior.

Observed Behavior

Klipper raises: No trigger on probe after full movement

Immediately after, Klipper logs:
“Exiting SD card print (position 0)”

CANCEL_PRINT is triggered even though the probe failure should have stopped motion.

20250329_175255-ezgif.com-video-to-gif-converter (1)
This is a video of what happens. I purposely triggered the z home high to safely show the failure and reaction.

Expected Behavior

Upon probe failure during QGL, Klipper should:

  • Immediately abort the probe routine

  • Stop all further motion

  • Enter shutdown state, not just exit the print job

Already tried with a pristine Klipper version?

Git version: 'v0.12.0-402-gedf597840-dirty'
Untracked files: klippy/extras/auto_speed.py, klippy/extras/gcode_shell_command.py, klippy/extras/cartographer.py, klippy/extras/idm.py, klippy/extras/scanner.py

Yes. The issue is not because of those. Looking deeper, it seems what’s happening is that it’s triggering the cancel macro when it fails during a print. And mine was set to park. I still feel it would be safer to shutdown rather that initiate a cancel_print if defined. Damage can be caused if the gantry is not well leveled yet.

So as a somewhat solution. If you edit the cancel function to do more than just hault, make sure to add a good rise before move or maybe a conditional check to do something else if doing QGL.