You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
delete of a NON-WRITABLE data property leaves the key un-re-addable: the next o.a = 9 is silently dropped (pre-existing on v0.5.1618) #10840
Found while writing the differential probe for the property-read guard removals (stacked on #10824/#10826/#10828/#10833). Reproduces on pristine main v0.5.1618 (/root/claude-nanbox baseline binary), so it is not caused by any of those PRs.
A data property that was made non-writable with Object.defineProperty, then deleted, cannot be re-added: the later plain assignment is silently dropped. The same sequence with a writable data descriptor, or with an accessor, works.
Actual (perry v0.5.1618 main, also the v0.5.1622 stack)
undefined false ["b"]
The delete itself is observed correctly (o.a reads undefined, "a" in o is false), and Object.keys after the failed re-add shows the key was never added — so it is the write after the delete that is refused, as if the deleted key's writable: false attribute still applied.
Variants (same binary)
sequence
perry
node
accessor -> delete -> o.a = 9
9 true ["b","a"]
same
non-writable data -> delete -> o.a = 9
undefined false ["b"]
9 true ["b","a"]
accessor -> non-writable data -> delete -> o.a = 9
undefined false ["b"]
9 true ["b","a"]
writable data -> delete -> o.a = 9
9 true ["b","a"]
same
Likely the per-key attribute survives the delete in the descriptor side table (or the write path's non-writable check consults it by key without confirming the key is still own), so the re-add is treated as a rejected write to a read-only property. Lane 1's area (object/descriptor_state.rs / delete_rest.rs); not touched by the read-path work.
Activity