What is wrong with this dbDelta syntax?

The dbDelta function is super nitpicky. Everything has to be exactly correct.

In this case, the lack of space between the table name and the parentheses following it will cause your call to fail, because it can’t figure out the table name without that space.

The relevant code in dbDelta() is this:

if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) {

It’s looking for CREATE TABLE, followed by a space, followed by some text that does not contain a space. That ending space between the table name and the open-parenth is therefore not optional.