I think the problem with #join is that people disagree on whether it should
be a string representation or version.

Is #join a method that takes an array of objects that can be represented
as strings, or does it take an array of (implicit) strings (as you said that
#to_str is for implicit argument passing situations).

I agree with you.
  1) It's more widely useful to use #to_s. Otherwise we can't even do simple
     things like join arrays of integers by default.
  2) I don't think you'll catch any meaningful bugs with a failure on #to_str.
     At most, it will alert you that you need to define #to_str. :)

However, not everybody may agree with such points.

- Dan

P.S. For what it's worth, I also agree with your statement earlier that #to_s
shouldn't really be used for debugging, and that #inspect and #p are the
appropriate methods to use in that situation.