StateReadError is the error type for callers to work with.
It captures all possible errors that can occur while reading state, classifying them into two categories.
Unless StateReadError is the final error state before returning to caller, the app may still want error context.
This context is preserved in Internal and Client variants.