VC
Почему-то не задумывался над релюхой так глубоко. Казалось, что она просто должна игнорить события ошибки и комплита.
А это не так.
Relay<T> extends Observable<T> implements **Consumer**<T>
То есть Subject наследует Observer у которого можно вызвать методы onNext, onError, onComplete. А Relay наследует Consumer у которогое есть только accept (аналог onNext).
Поэтому когда мы подписываем Relay на цепочку мы используем вариан ТОЛЬКО c консьюмером next'ов. Отсюда и падение, тк консьюмера для эрроров нету.