I find the Serial.readBytesUntil documentation a bit lacking. This is what it says at the time of this writing:
Serial.readBytesUntil() reads characters from the serial buffer into an array. The function terminates if the terminator character is detected, the determined length has been read, or it times out (see Serial.setTimeout()).
Serial.readBytesUntil() returns the number of characters read into the buffer. A 0 means no valid data was found.
Serial.readBytesUntil() inherits from the Stream utility class.
First, it does not tell if the terminating character is included in the result or not.
Secondly, it says that zero means no valid data, but it should more correctly read "no data". For example, an empty string input may very well be "valid".
Third: if I've read the source correctly the terminating character is not included in the response, which means there is no way to determine if the method timed out or the terminating character was read.
I guess the implementation is hard to change at this point, but at least the documentation should be updated.