04cea188c6
A plain <Box> (no explicit flexDirection) lays out as a row — yoga's Box default is FLEX_DIRECTION_ROW (host/yoga.ts) — so its screen-reader children must be joined with a space, matching Ink (which hardcodes flexDirection:'row' in Box.tsx and derives the SR separator from style). Root cause: flexDirection is a pure yoga prop. node-ops applies it to the yoga node but does NOT mirror it into node.props (it is not in STYLE_PROPS), so the yoga row default was never reflected there. screen-reader.ts read node.props["flexDirection"], which was undefined for every live-rendered box (both default AND explicit column/row), wrongly defaulting the separator to "\n" in all cases. Fix: resolve the direction from the yoga node (preferring an explicit props.flexDirection for the direct-built unit fixtures), mirroring static-channel.ts's resolvedFlexDirection so both SR linearization paths derive the separator identically. Root keeps undefined → "\n" (Ink's column-default root). row-reverse/column-reverse reversal is unaffected. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>