Paul, Boyan - thanks for the comments.

To clarify:

Steps per in Mach3 is set to the correct calculated value for the ballscrew lead and microstep settings on my machine. Assuming that the ballscrew is to spec (and it is only C7), any significant error is due to a mechanical fault, which is what I am trying to find. However, over a short distance (up to 10mm, the range of my dial gauge) travel error is down around the 0.01mm region. Over 150mm, measured using two holes plunged with a 6mm single-flute cutter and measuring across two drill shanks pushed into these holes, travel error is around 0.03mm but this is measured with a vernier caliper so not as accurate as the dial gauge. All movements are designed to allow for backlash. If I repeat any of these checks with gantry movements arranged to maximise backlash, I see around 0.05mm error. I'm reasonably happy with these numbers for the moment.

I can plunge-cut holes with a number of different cutters and check hole diameter using drill shanks. All cutters seem to give correct sizes.

If I now take cuts on opposite sides of a (roughly 50mm) block to produce two parallel faces and measure them, there is a consistent error of about 0.3mm. Even though I have checked machine movement and cutter diameter.

All movements are single axis move and are done using manual gcode typed into MDI window, so CV etc corrections are not relevant. All movements are done at G1 rather than full rapid feed rate to avoid any possible missed steps.

Gantry squaring is not an issue here as I am just using movement in x axis (gantry move, the long axis, on my machine). However, I have set up squaring using the "4 holes in a square and measure diagonals" method and it's as close as I can get using vernier caliper to measure. It would have to be a long way off to generate the errors I see in the parallel-cut test.

If I put a dial gauge fixed to bed against the shank of a cutter held in the spindle and pull and push the gantry, I see a range of about 0.04mm - lost movement/backlash in overall system. There's a bit of flex as well if I lean on it hard enough, of course, but that's the figure for light loads. Dial gauge on shank and rotate spindle shows about 0.03mm TIR - collet error, probably.

So, I'm seeing reasonably accurate machine movements. I'm using cutters which appear to cut to size. When I combine these two, there is a significant error. I'm missing something really obvious here.

Overnight musing came up with the idea of positioning for my parallel cuts as above and trying to measure gantry movement to double-check this value under the same conditions as the parallel cut test. I'm trying to systematically narrow down the fault here, but running out of ideas.