Well it is definitly an optimization that is new to BaseX 10. But I think I found a way to default to "" where I just passed () from a variable before.

True. With BaseX 10, XQuery compilation was split up into a static (logical) and a dynamic (physical) step to allow for a more fine granular locking. In the static compilation, your expression will be rewritten as follows:

collection('i_do_not_exist')/users/user[@name=()]
→collection('i_do_not_exist')/users/user[false()]
→collection('i_do_not_exist')/users/()
→collection('i_do_not_exist')/()
→()