Maybe you can try to fix your issue by forcing the buffer-undo-list variable to nil for the elisp mode, as follow:
(add-hook 'elisp-mode (lambda () (setq-local buffer-undo-list nil)))
I tried it but still no joy...
Looking at this issue I noticed 3 things that may help to pinpoint the origin...:
I have 2 variables set that affect the scratch buffer in my config (without yours, that it's the 3rd):
Before this reply, (setq-default major-mode 'org-mode) was (setq default-major-mode 'org-mode). Both expressions seems indistinguishable in the resulted behavior.
The scratch buffer starts in org-roam mode (and read-only mode), which is very strange, but can obviously be related and/or part of the problem. The org-roam section (my config is literate in org-mode) comes before this variables being set.
I'm using vanilla emacs with my own configuration. And replying to Sunoc made me remember that the scratch buffer starts as read-only and not in org-mode.
So it seems it comes from there...
I'll have to bissect it?
the buffer is not in read-only, but it always start as so.
the keybinding is ok since it works in all the rest of the buffers.
Upon calling undo, emacs says "no undo information in this buffer" (searching for this didn't seem to give relevant information except something from 2006 and then something about specific of a table-spreadsheet that I don't use).
From this and @ouigol@beehaw.org (I will relpy after this one) it looks that it may be my configuration, since I'm using vanilla emacs with my own configuration.