Misses another, obvious paradigm: errors are values.
Errors aren’t exceptional (ha) and you can program with them as you can any other value.
That’s kinda like what Go does.
The trick with errors are values (which I agree the author misses) is that the values are unstructured and mostly ad hoc. Exceptions add some structure, but rarely enough that you can do much meaningful with them.
Most of the time errors as values end up being a really big enumeration, like the errno results. It’s basically a list of things that can go wrong. And you generally don’t know all of those ahead of time.