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!