Validation is fragile and responsibility is spread out among classes. Take a small clean-up step, with these acceptance criteria:
- Gateway adapter class has the sole responsibility for defining and running validations.
- Drop distinctions between error types, e.g. manual and validation errors.
- Changed code must be completely covered by tests.