Unexpected problem with previously working code - multiple dispatch seems to be failing

See the documentation about methods:

Keyword arguments behave quite differently from ordinary positional arguments. In particular, they do not participate in method dispatch.

Since you are using the same name for the same signature (ignoring keyword arguments) you will overwrite some methods too. You can see this if you start julia with --warn-overwrite=yes:

julia> f(; x = 1) = x
f (generic function with 1 method)

julia> f(; y = 1) = y
WARNING: Method definition f() in module Main at REPL[1]:1 overwritten at REPL[2]:1.
WARNING: Method definition kwcall(NamedTuple{names, T} where T<:Tuple where names, typeof(Main.f)) in module Main at REPL[1]:1 overwritten at REPL[2]:1.
f (generic function with 1 method)

Note that there is still just one method, the one with y as keyword argument:

julia> f(x = 2)
ERROR: MethodError: no method matching f(; x::Int64)

Closest candidates are:
  f(; y) got unsupported keyword argument "x"
   @ Main REPL[2]:1

julia> f(y = 2)
2
4 Likes