The error currency of the library.
Every failure surfaces as a t/0 struct — {:error, %Foresight.Error{}}
from API calls, or a raised exception in non-taggable contexts — carrying a
machine-readable reason, an optional detail, and a context map for
debugging.