In the Connect Nodes wizard step 2 (RelationshipStep), the third radio option “Read as an input” was clipped at the viewport bottom. Its title was partially visible and its description paragraph was cut off entirely. In the 2× density screenshot scenario (512×384 dp logical), the third option RadioButton circle appeared at ~360 dp — right at the bottom of the 384 dp viewport — with no description text visible.
Two compounding factors pushed the content height to ~460 dp in a ~340 dp available area:
NodeBadge used CommonLayout.ICON_SIZE_LARGE (62 dp) for the node pairing header icons, adding ~78 dp for the badge row.RelationshipStep Column used Arrangement.spacedBy(CommonLayout.SPACING_MEDIUM) (12 dp) between all five items — back button, badges, title, options column, connect button — adding 48 dp in spacing alone.The production path (inside NodeEditorContainer) already provides verticalScroll, so users could scroll to option 3. But the third option was never initially visible, requiring users to discover the scroll affordance.
NodeBadge’s icon box from CommonLayout.ICON_SIZE_LARGE (62 dp) to CommonLayout.ICON_SIZE_STANDARD (32 dp), saving 30 dp in badge row height.RelationshipStep Column’s verticalArrangement from Arrangement.spacedBy(CommonLayout.SPACING_MEDIUM) to Arrangement.spacedBy(CommonLayout.SPACING_SMALL) (8 dp), saving 4 × 4 = 16 dp across the four item gaps.Combined saving of ~46 dp brings the third option’s start position to ~314 dp, comfortably within the 336 dp content area.
512×384 dp canonical screenshot viewport (2× density, default runDesktopComposeUiTest canvas) before shipping.NodeEditorContainer’s weight(0.6f) content box), prefer SPACING_SMALL unless the visual rhythm genuinely needs SPACING_MEDIUM.recordRoborazziDesktop screenshot task provides a cheap visual regression check; run it before opening a UI PR.