It seems like you may have missed the preceding warning:
julia> c(rand(10, 10, 3, 1))
┌ Warning: Slow fallback implementation invoked for conv! You probably don't want this; check your datatypes.
│ yT = Float64
│ T1 = Float64
│ T2 = Float32
└ @ NNlib ~/.julia/packages/NNlib/tvMmZ/src/conv.jl:291
Using Float32, everything works as expected:
julia> c(rand(Float32, 10, 10, 3, 1)) |> size
(10, 10, 3, 1)
That said, the assert being triggered from the fallback definition does look fishy to me. Will report an issue on NNlib for this.