Summary
In the WebEditor (and confirmed as an exception in the desktop editor), clicking "Make editable copy" for the changedparent script (inherited from defaultobject) requires two Undo clicks to revert, whereas other inherited scripts such as changedisopen only require one.
Steps to reproduce
- Open the WebEditor with a game that has a room
- Go to the Attributes tab for the room
- Find the
changedparent attribute (inherited from defaultobject) — it shows as locked/read-only
- Click Make editable copy
- Press Undo
Expected: changedparent reverts to inherited state in one Undo step.
Actual: One Undo step is consumed but the attribute remains as an owned (non-inherited) copy; a second Undo step is required to revert.
Notes
- This only affects
changedparent, not other changed* scripts like changedisopen or changedlocked.
- The desktop editor (Quest 5) throws an exception when attempting the same operation, suggesting a deep pre-existing bug in how
changedparent interacts with the undo system.
changedparent is distinctive in that it sets this.hasbeenmoved = true and contains a nested if/else block, whereas other changed* scripts do not.
- Investigation confirmed that
MakeScriptEditable creates exactly one undo transaction via EditableScripts.Clone → Fields.Set, so the extra undo step must be created by some secondary effect triggered specifically by setting the changedparent attribute.
- Possible lead:
Fields.Set fires AttributeChanged → NotifyElementFieldUpdate — something in this chain may be triggering an extra undo entry specifically for the changedparent attribute name.
Environment
- Branch:
webeditor-attributes
- Quest Viva v6 (WebEditor, Svelte 5 + C# WASM)
Summary
In the WebEditor (and confirmed as an exception in the desktop editor), clicking "Make editable copy" for the
changedparentscript (inherited fromdefaultobject) requires two Undo clicks to revert, whereas other inherited scripts such aschangedisopenonly require one.Steps to reproduce
changedparentattribute (inherited fromdefaultobject) — it shows as locked/read-onlyExpected:
changedparentreverts to inherited state in one Undo step.Actual: One Undo step is consumed but the attribute remains as an owned (non-inherited) copy; a second Undo step is required to revert.
Notes
changedparent, not otherchanged*scripts likechangedisopenorchangedlocked.changedparentinteracts with the undo system.changedparentis distinctive in that it setsthis.hasbeenmoved = trueand contains a nestedif/elseblock, whereas otherchanged*scripts do not.MakeScriptEditablecreates exactly one undo transaction viaEditableScripts.Clone→Fields.Set, so the extra undo step must be created by some secondary effect triggered specifically by setting thechangedparentattribute.Fields.SetfiresAttributeChanged→NotifyElementFieldUpdate— something in this chain may be triggering an extra undo entry specifically for thechangedparentattribute name.Environment
webeditor-attributes