#3745 reports that nested block content controls are dropped during layout conversion. The root cause is that the layout pipeline represents one content control per block, but OOXML lets block SDTs nest (CT_SdtContentBlock permits a child sdt), and each control carries its own identity and lock targeting its nearest ancestor. Flattening to the nearest control drops the inner content and loses the outer control's identity.
The fix preserves the full container ancestry, outer to inner, from the layout adapter through resolved layout and into the painter, so nested controls keep their content, metadata, grouping, and chrome. #3746 (thanks @tom-material) identified the failing path.
Plan:
Out of scope: editor lock enforcement, which reads the PM tree directly and is unchanged. Closes #3745 when the painter step lands.
#3745 reports that nested block content controls are dropped during layout conversion. The root cause is that the layout pipeline represents one content control per block, but OOXML lets block SDTs nest (
CT_SdtContentBlockpermits a childsdt), and each control carries its own identity and lock targeting its nearest ancestor. Flattening to the nearest control drops the inner content and loses the outer control's identity.The fix preserves the full container ancestry, outer to inner, from the layout adapter through resolved layout and into the painter, so nested controls keep their content, metadata, grouping, and chrome. #3746 (thanks @tom-material) identified the failing path.
Plan:
Out of scope: editor lock enforcement, which reads the PM tree directly and is unchanged. Closes #3745 when the painter step lands.