Shared error type. Vendors and renderers convert their failures into AppError so the widget shell can decide whether to retry, fall back to cache, show ⚠, or show “Loading…”.
AppError