There is no bug.
Mach3 keeps track of its position in Machine Co-ordinates. These are only changable by homing. If homing switches are fitted, then the machine homes and stops and the machine co-ordinates go to zero. You cannot change these co-ordinates. (Yes, If your home switches are disabled, then pressing the Ref All Home button turns all three axis to 0 at any position - but you would normally use the switches)
It is doubtful that the home switches will be in a position where any useful work can be done, and certainly not in a position where the program was written from, so offsets are used. Each program should have the offset from the home position written in at the beginning of the program. In other words you jog your machine to the position where your program starts and then zero the program co-ordinates (displayed if you click the machine co-ordinates button and the led surround goes off). Program co-ordinates can be zeroed at any position.
So you now have you machine at the start point of your program. If you look at the program co-ordinates it will show 0,0. but if you look at the machine co-ordinates it will still show the position of the table as offset from the home position. If you have no offset selected then G54 is the default offset, and if you look in Config/Fixtures, you will see that g54 has these co-ordinates entered in automatically. If you transfer these co-ordinates, say to G55 (or any of the other 255 slots), then if you amend your Gcode program and include g55 at the begining, then the machine knows where to start, and if you were in a professional machine shop, you would home you machine and then when you run the program, the machine automatically moves to the correct position for the start of that program.
For us mere mortals, however, following the position in Machine Co-ordinates is confusing, because the figures refer to some obscure position that the machine knows, but we don't, so we follow the proceedings in program co-ordinates, because they also relate to the program we have written, and we can check it as we go along.
The toolpath window only displays Program Co-ordinates so where you are doing the same pattern at different offsets it seems to repeat over itself.
What you are doing is setting the machine up so that your Machine Co-ordinate position co-incides with your first program co-ordinate position (G54 is 0,0) so as far as the machine is concerned, that is it's home position. It ignores g54 since it is no offset.
It runs the programĀ from 0,0 and if you look at program and machine co-ordinates you will see they co-incide.
When you feed in g55, the 0,0 position for the program moves to machine co-ordinates 1,1. The program runs from 0.0 again, but it starts at machine position 1,1, and so on. The toolpath window just displays the program, not the machine co-ordinates.
I see in the program you have g54 and then put the comment "reset offsets". g54 does not reset the offsets, it is an offset in it's own right, it is just that you have set it to 0,0. and therefore it is using the machine co-ordinate position.
There is nothing wrong with what you are doing, providing you remember to RefAllHome at your 0,0 point. Indeed if you had some sort of switches you could set to home to this position it would be most convenient. Mine are lasers shining on detectors so I could possible do it, but with mechanical switches it is difficult.
But that it the explanation. If you think about it, if you home you table somewhere out of the way, and RefAllHome, (to zero your machine-co-ordinates) then jog to your starting position and then zero your program co-ordinates - check g54 - it might read 5,4 (for simplicity).
If you now alter g55 to read 6,5 and g56 to 7,6 you will get the same effect. Jog your table anywhere and set it running.
The machine will pick up G54 and run to the first start positiom, then g55 and run to the second start position and g56 and run to the third position.
Offsets are all calculated from the 0,0 machine co-ordinates 0,0 position