mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 14:00:37 +00:00
When sync turns a parent, turn its subtree as derived placement before walking the children. Geometry overrides keep their size and relative angle, including swapped children. Read current builder objects throughout the walk so later syncs do not transform stale records again. Normalize matrix axis directions for this turn: constraints already handle resize, and minimum-size matrix scale must not resize children twice. Portable regression fails for ordinary and swapped geometry overrides. Expanded controls cover parent turns of 45/135 degrees and authored child angles of 0/10 degrees, points, flags, retained size, repeat sync and undo. Broad focused/golden checks: 204 tests, 2314 assertions. Latest controls and shrunk program: 2 tests, 89 assertions. Goldens remain unchanged. Initialize the container when direct sync receives an empty builder. Register the geometry namespace in the JavaScript runner and read record fields with get in the older flip control. Geometry: 9 tests, 149 assertions on both runtimes. Full common JS: 1768 tests, 29215 assertions. Full frontend: 1532 tests, 9039 assertions. Lint and formatting pass. Live WASM verifies both roles, retained placement and later style sync. Component benchmark ratios: mains 0.51/0.56/0.64; levels 0.62; chain 0.55; library 0.53; many shapes 0.45; variant switch 0.60. All worlds pass the unchanged baseline gate. AI-assisted-by: GPT-6