ecc8be3dba
#14: after editing a message the edited text reappeared in the composer as a draft and re-sent as a new message. The input listener saved a draft while editing, but saveEdit/cancelEdit cleared only the input value, not the stored draft — so openConvo restored it. Now editing never writes a draft, and save/cancel clear it. #8: a contact's subtitle flapped between "last seen …" and "Offline". A loadSidebar rebuild replaced the row with the server's lastSeen, which is sometimes null (the disconnect touchSeen is fire-and-forget and can lag the presence broadcast). Now the client keeps last-seen sticky (never overwrites a known value with null) and the server never broadcasts a null last-seen for an offline user. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>