When composing a new note, the cursor would jump in front of the first letter after typing it. This occurred because multiple SwiftUI view updates (text change, placeholder removal, height change) could cause the cursor position to be incorrectly restored. The fix explicitly tracks the cursor position after each text change by calling updateCursorPosition, ensuring the correct position is always used regardless of view update timing. Refactored textViewDidChange to use early return pattern for clarity. Added UI test to guard against cursor position regressions in the post composer. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Changelog-Fixed: Fixed cursor jumping behind first letter when typing a new note Closes: https://github.com/damus-io/damus/pull/3473 Closes: https://github.com/damus-io/damus/issues/3461 Co-Authored-By: Claude Opus 4.5 Tested-by: William Casarin <jb55@jb55.com> Signed-off-by: alltheseas Signed-off-by: William Casarin <jb55@jb55.com>