The problem isn't that each_line isn't doing what it's supposed to be doing.  The problem is that each_line doesn't strip the end of the input lines so,

    "a\r\nb\r\nc\r\n".each_line { |l| pp l }
    # => "a\r\n"
    # => "b\r\n"
    # => "c\r\n"

In the plugins, there are regular expressions that include line terminators, so if the lines don't get stripped, the regex won't match.

It seems like there are three possible solutions to this:

1.
    so.stderr.each_line do |line|
    case line.rstrip

2.
    so.stderr.split(/\r?\n/).each do |line|
    case line

3. Modifying the matching regex'es so that we can use
    so.stderr.each_line do |line|
cleanly.