In Emacs 27 or 28, each and every partial fragment of text introduced to the completion system gets put into obarray. From emacs -Q: (intern-soft "ohno") -> nil (ohno -> No match (intern-soft "ohno") -> ohno :( This has the result that, e.g.: (test-completion "ohno" obarray nil) ; t! Sigh will always return t during completion, for any completed fragment. For completion systems that complete against obarray (e.g. emacs-lisp), this is obviously undesirable.