text_in_cols and text_slice_cols now walk grapheme clusters with
grapheme_width() instead of assuming 1 char = 1 column. This fixes
column slicing for:
- Wide characters (CJK, emoji) that occupy 2 grid columns
- Combining marks that occupy 0 columns
The prior 1:1 char∶col mapping caused selection-copy and serialize
output to misalign column ranges when wide/combining characters were
present in a row.
- Update roadmap: mark both P0 follow-up items as resolved