Please reread the question, tread is working but reporting different result to the online command T. The difference is the cutter compensation value.
Put another way, if cutter compensation is not used the system works perfectly. T and tread report the same correct values. When cutter compensation is applied the following occurs
1. The program moves through the correct path
2. T reports the programmed target positions
3. tread reports the actual target positions not the programmed target positions
From my configuration
Coord[0].SegMoveTime=5; // ms
#define MaxStoppingTime0 Motor[1].MaxSpeed * Motor[1].InvAmax
#define LHSegsNeeded0 MaxStoppingTime0/(2.0 * Coord[0].SegMoveTime)
Coord[0].LHDistance=4.0/3.0*LHSegsNeeded0;
Coord[0].TPSize=3 + Coord[0].LHDistance; // at least 3, plus the number of lookahead segments
Coord[0].TPCoords=$1E6; // Axes X, Y, Z, B, C, W
normal is set to 0,0,-1