X Axis Shifting Right (+ direction) in 3D Print with Dual Extruder

I really doubt the build plate has anything to do with it. If you look at those orange prints, there simply isn’t that much room for the build plate to shift, even if it started out all the way to the right and got nudged all the way to the left. There isn’t any sort of circular pattern to the shifting layers, they move in a single direction, and the build plate wouold start to rotate once it hit the Z axis module.

This is similar to https://forum.snapmaker.com/t/oh-great-back-to-shifting-layers/30827/8 which I believe was caused by a bad linear modules.

Both are happening with the dual extruder. I would suspect that the firmware is determining the position of the toolhead using the wrong nozzle offset (as an example of how this would happen: after a pass, the toolhead returns to an offset from 0 based on the the edge of the print, and it uses the current position of nozzle to determine how far to travel to return to that offset, but it starts printing off nozzle B, and the error is compounded after each layer), OR the X axis has a problem. It could be that the firmware is not accounting for the difference between the nozzles correctly, and when it returns t origin it overshoots, grinding the carriage against the end stop and causing excessive wear on the module - mean the core problem is the firmware, but the module is what needs to be replaced. That might explain why it is seen only n a few machines (heavily used printers with the old linear modules?) and not on every single one.

If this were happening to my machine (and it might; I have a dual extruder but have been afraid to start using it as I only just got the A350 to produce reliable prints), I would measure the distance that a shift happens per layer (use the thickest layer height you can and just print some squares) and compare that to the distance between the nozzles. I would also pause the print at the start of a layer and make a sharpie mark on the X-axis module, then pause a few layers later and see if the sharpie mark aligns with the module. This wouold be tricky to do though; might require adding actual pauses to the gcode.