The month and the day of month should be a negative or a positive number (as a relative month/day from the end of year/month when negative). They should not be zero.
I don't think this is a bug in the code, but I do think we should improve the documentation for valid_date. I've added a pull request to do so: https://github.com/ruby/date/pull/7.