Controller version
develop at 2ea66c10e96d88013a04441134d3d4f8e8c88510. This is controller-side probing-form validation.
Reproduction
Create an operation whose X distance is conditionally required, then leave the X input blank:
operation = BoreOperation("Bore X", requires_x=True, requires_y=False, image_path="")
config = {"X": ""} # whitespace-only has the same result
assert operation.get_missing_config(config) is None
assert operation.generate(config).strip() == "M461"
The same presence-only conditional check is used by Bore, Boss, Angle, and all three ProbeTip variants for both X and Y.
Expected
An empty or whitespace-only value for a conditionally required axis should be returned as the missing field, just like an absent key. Numeric strings including "0" should remain valid.
Actual
The operation-specific validators only check whether the key exists, so {"X": ""} passes that conditional requirement. The shared G-code formatter then omits blank values, producing an M-code without the axis the selected operation requires: blank-value omission.
Affected checks:
Impact
The controller can treat an incomplete probing form as valid and emit an incomplete probing command. Firmware behavior for such a command is a separate concern; this issue is the controller failing to enforce its own selected-operation requirement.
Regression proof
A 48-case matrix covers six operation classes, both conditional axes, blank and whitespace-only inputs, plus "0" and "12.5" positive controls. Against the pinned base, all 24 blank/whitespace cases fail while all 24 numeric-string controls pass.
Controller version
developat2ea66c10e96d88013a04441134d3d4f8e8c88510. This is controller-side probing-form validation.Reproduction
Create an operation whose X distance is conditionally required, then leave the X input blank:
The same presence-only conditional check is used by Bore, Boss, Angle, and all three ProbeTip variants for both X and Y.
Expected
An empty or whitespace-only value for a conditionally required axis should be returned as the missing field, just like an absent key. Numeric strings including
"0"should remain valid.Actual
The operation-specific validators only check whether the key exists, so
{"X": ""}passes that conditional requirement. The shared G-code formatter then omits blank values, producing an M-code without the axis the selected operation requires: blank-value omission.Affected checks:
Impact
The controller can treat an incomplete probing form as valid and emit an incomplete probing command. Firmware behavior for such a command is a separate concern; this issue is the controller failing to enforce its own selected-operation requirement.
Regression proof
A 48-case matrix covers six operation classes, both conditional axes, blank and whitespace-only inputs, plus
"0"and"12.5"positive controls. Against the pinned base, all 24 blank/whitespace cases fail while all 24 numeric-string controls pass.