Proc doesn't check arity. That is just how proc and Proc.new are expected to work. If you want to check the arity, use lambda or ->.
x = ->(a, b) { puts a, b }
x.call #ArgumentError: wrong number of arguments (0 for 2)
x = lambda { |a, b| puts a, b }
x.("just one argument") #ArgumentError: wrong number of arguments (1 for 2)