mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 14:00:37 +00:00
- The :shapes-group reads. Sync skipped adding, removing and moving the children of a copy whose touched groups held :shapes-group. Nothing has set that group since 2024 (it was removed then, with a script that cleaned it from files), and the component contract makes structure follow the main, so the guards never applied. They go, with the omit-touched? argument they alone used in add-shape-to-instance, remove-shape and move-shape. - :fill-color, :fill-opacity and :stroke-width in ctk/sync-attrs, marked deprecated. Shapes keep fills and strokes in :fills and :strokes, migrations moved the old shape-level attributes there, the shape schema no longer has them, and no test syncs them any more, so sync no longer checks them on every shape. The TODO about concat-changes in generate-sync-file goes too: concat-changes no longer nests lazy sequences. - The inverse sync's swapped callback. An inverse sync pairs no swapped child, and every pair it makes counts as synced, so compare-children never calls it; the inverse direction now has no :swapped and passes nil. - The detach in generate-relocate of a copy shape moved out of its component. It only looked at the copy heads among the moved shapes (get-child-heads), and a head is never a non-head copy shape. No behavior change: the golden masters and the suites are unchanged. Benchmark (lower quantile, ms; baseline / now / ratio): deepest-edit-through-three-levels 35.2 / 38.2 / 1.08 edit-through-a-chain-of-dependents 68.9 / 65.0 / 0.94 library-update-into-copies 83.1 / 77.3 / 0.93 main-edit-into-10-copies 1.8 / 1.5 / 0.86 main-edit-into-100-copies 15.4 / 15.1 / 0.98 main-edit-into-1000-copies 153.1 / 154.8 / 1.01 variant-switch-into-copies 32.1 / 27.5 / 0.86 AI-assisted-by: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>