A completion of "\n" with a file bound to it was read as words: both send
paths tested `content != ""`, so an empty markdown bubble went into the chat
ahead of the file, and the reply's outcome was recorded as delivered by that
text — leaving the file's own failure unable to move the reply counter.
`hasVisibleChar` (a rune that is neither whitespace nor a control character)
replaces `!= ""` on both the local path (processEvent) and the relayed one
(deliverRelayed), and the same predicate decides `carriesTheReply`. Fixing
both matters: which one runs depends on where the WS lease sits, so a
one-sided fix would let the replica holding the socket decide whether the
user sees a blank bubble.
Regression tests cover both paths and are reverse-verified against the
restored `!= ""` spelling, which `go vet` does not catch.
Co-authored-by: Xichang(Seacen) Zhao <[email protected]>