I think this should do the trick:
df |> @vlplot(x=:m, height=400, width=400) +
@vlplot(:point, y=:ul) +
@vlplot(:point, y=:ll) +
@vlplot(:rule, y=:ul, y2=:ll)
I pulled the common properties for all layers into a first call to @vlplot that doesn’t have any mark. So this first call does not turn into a layer, this becomes the “parent” spec.