I've just checked the RRF source. It only looks for the colon items when an "extruderLetter" is being processed. So it will be ignoring them on Z(hence no error). I'm not really sure what DSF is doing though.
for (size_t axis = 0; axis < numTotalAxes; axis++) { if (gb.Seen(axisLetters[axis])) { if (!LockMovementAndWaitForStandstill(gb)) { return false; } seen = true; #if SUPPORT_CAN_EXPANSION axesToUpdate.SetBit(axis); #endif const unsigned int microsteps = gb.GetUIValue(); if (ChangeMicrostepping(axis, microsteps, interp, reply)) { SetAxisNotHomed(axis); } else { result = GCodeResult::error; } } } if (gb.Seen(extrudeLetter)) { if (!LockMovementAndWaitForStandstill(gb)) { return false; } seen = true; uint32_t eVals[MaxExtruders]; size_t eCount = numExtruders; gb.GetUnsignedArray(eVals, eCount, true); for (size_t e = 0; e < eCount; e++) { const size_t drive = ExtruderToLogicalDrive(e); #if SUPPORT_CAN_EXPANSION axesToUpdate.SetBit(drive); #endif if (!ChangeMicrostepping(drive, eVals[e], interp, reply)) { result = GCodeResult::error; } } }Edit: DC42 beat me to it, with a much clearer explanation!