Studio's "undo" function produces inaccurate results when constraints are involved

Reproduction Steps
Repro File:
Bug Repro.rbxl (241.8 KB)

Reproduction steps:

  1. Open repro file
  2. Turn on “Show Welds”, “Constraint Details”, and “Draw on Top”
  3. Select the Model that is a child of Workspace
  4. Duplicate the model, then drag the duplicated model somewhere else on the baseplate
  5. Hold “alt”, then click and drag to create a selection box around the duplicated model.
    Should look like this: bbbbb
  6. Press “backspace” to delete all contents of the model
  7. Use studio’s “undo” function to undo the deletion.

This has been happening to me for a while now on both mac and windows. Here are the specs for my windows pc:
CPU: AMD Ryzen 9 5900X 12-Core Processor
Memory: 32 GB
Disk: Samsung SSD 970 EVO Plus 2TB
GPU: NVIDIA GeForce RTX 3070 Ti

Expected Behavior
The model should be right back how it was, with all the attachments in the correct places:

Actual Behavior
Multiple parts and attachments of the model are moved away from their current position and back to where they were initially created:

This ruins your current model as whatever you are working on gets completely rearranged beyond recognition.

This bug doesn’t just happen with deletions, this issue occurs from undoing after simply moving some of these parts or undoing after making modifications to constraints.

There is no workaround for this issue other than simply not making any mistakes that would require you to undo. You could make a copy of whatever you are working on every single change, but if you don’t than in case you need to undo you are completely out of luck.

This makes working on models like these very challenging as I cannot make any mistakes without having to manually go back and pull the autosave file from 5 minutes prior.

Issue Area: Studio
Issue Type: Other
Impact: High
Frequency: Constantly
Date First Experienced: 2020-04-30 00:04:00 (-04:00)


Managed to reproduce it. Thanks for the report! I have submitted an internal ticket.