Skip to content

Blank conditionally required probe axes pass validation and are omitted from M-code #671

Description

@righteousgambit

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions