Bug observé sur le client de test 13.2.b.3 : le carré rouge subsurface
est rendu correctement au commit du child (à parent_pos + offset), mais
le `parent_surface.commit()` final côté client appelle raise(parent) et
place le parent au-dessus du child dans le z_order. Résultat visuel :
parent overdraw child, subsurface invisible.
Fix : après raise(parent_id), scanner surfaces_by_id pour trouver toutes
les subsurfaces dont le subsurface_link.parent pointe vers cette
SurfaceId, et les raise() juste après. Coût O(N) par raise, mais N est
petit (1-10 toplevels typique).
Note design : c'est une solution naïve. Une vraie implémentation
maintient un index parent_id → Vec<child_id> mis à jour à GetSubsurface
et à Destroy. À durcir en phase 13.2.b.5 si le scan O(N) devient
limitant (genre 50+ surfaces visibles).
Les 2 tests natifs continuent de passer en non-régression.
Leyoda 2026 – GPLv3