Стандартизировали Failure по другому
Все фейлуры с кодом и пейлодом при необходимости
Failure(code: :validation_error, payload: {email: [‘must be filled’]})
Failure(code: :contract_sign_error, payload: { some_specific_error: some_description })
Их удобно в 2.7 паттерн-матчингом разбирать. Проверяем
Сделали это так потому как есть раширение to_monad у dry-validation, которое приводит ошибки к виду Failure({ key: [‘err1’, `err2`] })
А рекомендуемый на dry-rb формат кастомных ошибок Failure(:some_error)
Бывает, что с кастомной ошибкой нужно передать важную информацию. Например не хватило баланса для списания, в ошибке передаем сколько баланс, сколько нужно списать, сколько не хватило.
Поэтому перешли к единой схеме
Failure(code: :failure_code, payload: {})