//! Transport-independent classification of failures.
//!
//! Errors here describe *what went wrong* in the vocabulary of the subsystem that failed.
//! A transport edge needs a different question answered: *whose fault was it, and is a
//! retry worth trying?* [`ErrorKind`] is that second axis, so an edge maps one small enum
//! instead of re-matching every subsystem's variants.
/// How a caller should treat a failure, independent of which subsystem produced it.
///
/// Deliberately not `#[non_exhaustive]`: adding a kind should break every edge that maps it.
/// Answers [`ErrorKind`] for an error type.
///
/// Prefer widening to [`ErrorKind::Internal`] over guessing: a misclassified
/// [`ErrorKind::NotFound`] hides a real defect behind a 404.