This is actually a nice issue due to too much optimization...
- Making an ID local just reuse the linked one whenever possible, instead of actually making a copy of it.
- Therefore, the collection containing that ID is seen as unchanged, since the pointer itself remained the same.
- But on undo step, there is no way to reuse that local object, which then gets deleted, and linked one gets re-created - at a different address.
- Collection, however, since unchanged, is not updated at all and thus keep reference to the to-be-deleted local object, instead of the linked one.
- Issue gets even worse with viewlayers, this leads to the crash.
To address this, this patch adds a 'virtual' update flags that does nothing in update case, but will ensure that the affected IDs using the one made local are properly detected as changed across the relevant undo step.
Note that I chose to use the recalc flags mostly for a logical reason, and also because they are already properly dealt with and cleared by undo code, so this looks optimal to me.