Creep not moving
When a Creep appears stuck, first separate command rejection, path failure, fatigue, and target/range logic instead of repeatedly calling moveTo().
Quick triage
- Store the real result from moveTo() or the original action instead of judging only by position.
- Inspect creep.fatigue and confirm the target object and destination room are still valid.
- For ERR_NO_PATH, inspect terrain, exits, CostMatrix data, and callback constraints.
- Check position and the next result on a later tick to distinguish a persistent fault from a one-tick state.