Ah, I see Eli fixed ispell-highlight-spelling-error-generic last year.
http://git.savannah.gnu.org/cgit/emacs.git/commit/lisp/textmodes/ispell.el?id=f3b876fa75042a1c00886e07d8491ac11824a892

Still, this anachronistic kludge should really be nuked entirely.
Even with the current fix, it fails to use ispell-highlight-face,
instead always using inverse-video.

By "nuked entirely" I mean:
   (1) delete ispell-highlight-spelling-error
   (2) delete ispell-highlight-spelling-error-generic
   (3) rename ispell-highlight-spelling-error-overlay
           to ispell-highlight-spelling-error

On Wed, Jun 14, 2023 at 7:25 PM Gregory Heytings <gregory@heytings.org> wrote:

>
> emacs-28.2 -Q -nw --color=no
> s t o n k s M-$ 1
>
> At this point, I expect to see the word "stonks" replaced with "stocks",
> but it is instead replaced with "stockstonks".
>
> The problem seems to be in ispell-highlight-spelling-error-generic, a
> 20th-century kludge from before face support for ttys was added in
> emacs-21 in 2001.  It's been unnecessary since then, and it looks like
> it's been breaking ispell on colorless ttys since at least emacs-23.
>

This recipe can be reproduced with Emacs 25, 26, 27 and 28... but not with
Emacs 29, in which "stonks" is indeed replaced with "stocks".