Add, delete and move changes inside a deleted main carry a component
container ID. The change scanner ignored that destination, so it never
synced the deleted component's surviving copies after a structural edit.
Return the container's component ID for all three change kinds.
The integration regression failed with dangling refs before the fix.
It now removes the child from both the stored main and its copies and
checks undo/redo. Focused common suites pass: 66 tests, 11263 assertions.
Common lint passes.
Sync benchmark ratios against the 1e baseline (lower quantile):
main 10/100/1000 copies 0.55/0.65/0.61; three levels 0.52; chain 0.62;
library 0.58; many shapes 0.69; variant switch 0.79. No regression flags.
AI-assisted-by: GPT-6
* ✨ Show color tokens toggle on canvas background picker
* 🐛 Apply token click on canvas background with no shape selected
* ✨ Apply and persist color tokens on canvas background
* 🌐 Translate canvas background section label
Repair text shapes with empty/broken content at all three levels
(root, paragraph-set, paragraph) in migration 0025 to prevent
workspace update failures. Handle all corner cases: nil/empty/non-
vector children, non-map items, wrong types. Remove geometry-only
validation skip in changes.cljc so all shapes are validated.
AI-assisted-by: qwen3.7-plus