The whole-run deadline (:timeout_ms) expired (ADR 0027 / D5).
Before this existed the deadline raised a bare RuntimeError, so a host could only
tell a timeout from any other failure by matching on message text. The message still
NAMES the budget — run timeout after 1500ms — and the budget is also a field.
Summary
Types
@type t() :: %Toolnexus.TimeoutError{ __exception__: true, message: String.t(), timeout_ms: non_neg_integer() | nil }