Severity: low. Caret placement uses String::len() (byte length), not display columns, so after a multi-byte glyph (é = 2 bytes, emoji = 4) the block cursor sits right of the actual text in the line-mode input bar and the Add/Edit/Settings fields; the password mask also over-counts (two * per glyph).
Fix: compute caret placement and mask width with unicode-width display columns.
Locations: src/ui/terminal_view.rs:73, src/ui/popup.rs:169,425,465.
Filed from the 2026-07-09 full-repo review (findings adversarially verified before filing).
Severity: low. Caret placement uses
String::len()(byte length), not display columns, so after a multi-byte glyph (é = 2 bytes, emoji = 4) the block cursor sits right of the actual text in the line-mode input bar and the Add/Edit/Settings fields; the password mask also over-counts (two*per glyph).Fix: compute caret placement and mask width with unicode-width display columns.
Locations:
src/ui/terminal_view.rs:73,src/ui/popup.rs:169,425,465.Filed from the 2026-07-09 full-repo review (findings adversarially verified before filing).