dry-validation: validate_keys for nested array

I’m trying to catch unexpected keys in my (Rails-) API, using the following (simplified) code:

require "dry-validation"

class C < Dry::Validation::Contract
  config.validate_keys = true

  params do
    required(:name).filled :string

    optional(:tel).maybe(:array).each do
      hash do
        required(:number).value :string, :filled?
        optional(:note).maybe :string
      end
    end
  end
end
(pp C.new)
#<C
  schema=#<Dry::Schema::Params
    keys=["name", {"tel"=>["number", "note"]}]
    rules={
      :name=>"key?(:name) AND key[name](filled? AND str?)",
      :tel=>"
        key?(:tel) THEN key[tel](
          not(nil?) THEN array? AND each(
            hash? AND set(
              key?(:number) AND key[number](str? AND filled?),
              key?(:note) THEN key[note](not(nil?) THEN str?)
            )
          )
        )
      "
    }
  >
  rules=[]
>

An unspecified (top-level) key returns an error, as expected:

pp C.new.call(name: "Mario", random: 42, tel: [])
#=> #<Dry::Validation::Result{:name=>"Mario", :tel=>[]}
#     errors={:random=>["is not allowed"]}>

However, filling the :tel array returns an unexpected error:

pp C.new.call(name: "Luigi", tel: [{ number: "+1555123456" }])
#=> #<Dry::Validation::Result{:name=>"Luigi", :tel=>[{:number=>"+1555123456"}]}
#     errors={:tel=>{0=>{:number=>["is not allowed"]}}}>

I’m not entirely sure what’s happening here. Am I doing something wrong?

Through trial and error, I’ve landed on

require "dry-validation"

class C < Dry::Validation::Contract
  config.validate_keys = true

  params do
    required(:name).filled :string

    optional(:tel).array(:hash) do
      required(:number).filled(:string)
      optional(:note).maybe(:string)
    end
  end
end

This passes a few tests:

def validate(**params)
  pp C.new.call(params).errors.to_h
end

test(name: "Mario")                                   #=> {}
test(name: "Luigi", tel: [{ number: "+1555123456" }]) #=> {}
test(name: "Wario", tel: [])                          #=> {}

However, this requires the tel to be an array:

test(name: "Peach", tel: nil) #=> {:tel=>["must be an array"]}

Is there a way to allow nil values? Semantically, this be equal to the Mario test case (i.e. as if tel wasn’t given at all).