A backward compatible design would be resolve to user-defined functions first, built-in keywords afterwards.
That way any new keywords won't be a backward incompatible change.
if you have a UDF called .until and then this becomes a keyword, does the new 3rd party library you start using that uses the keyword .until still work, and what does the LLM vibe-coded start doing in the future when it makes use of the .until keyword?
That's a pretty bad design. You don't want users to be able to create functions named as keywords because it will break other code.