b436b57f13da7c47fc80116ec3fa65e4ff8cabf8
Remember last nickname: a new serde-default AppConfig.username field is pre-filled into the launch-screen nickname field, and saved when a room is joined or created (i.e. when the name is actually used), so it carries across launches. Sanitize chat: a pure sanitize_chat() drops control characters (ANSI escapes, NUL, stray CR/LF/TAB), collapses whitespace runs to single spaces, trims, and caps length (2000 chars). Applied to our outgoing text on submit AND to incoming peer messages on receive — peer content is untrusted, so the sender's name and text are both sanitized before display; empty-after-sanitize messages are dropped. Unit tests for sanitize_chat (control/whitespace/unicode/empty + length cap) and a config backward-compat assertion for username. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>