mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 14:00:37 +00:00
A merge or an update from main compared a component's main and each copy as separate shapes. A copy added on the other side kept the old look, and when both sides changed the component the dialog showed one conflict per copy, so a copy could end up disagreeing with its component without being marked as overridden. Copies now follow the merged component, as they do when the component is edited. Per copy attribute: if no side overrode it, it raises no conflict and follows the component; if one side overrode it, that side wins; only overrides on both sides that differ stay a conflict. After the merge or update applies, the copies of every local component whose main changed are synced, nested copies included, and the sync changes are validated and recorded with the rest. A clean merge of a copy no longer marks it as overridden on the target. AI-assisted-by: claude-opus-5-5