#[non_exhaustive]pub enum FinalizeError {
Task(JoinError),
Invariant(String),
Receipt {
context: String,
source: Option<ErrorSource>,
},
Atif {
context: String,
source: Option<ErrorSource>,
},
Promotion(String),
CaptureIncomplete,
ToolEvidence(String),
Bridge {
context: String,
source: Option<ErrorSource>,
},
BridgeConfig {
context: String,
source: Option<ErrorSource>,
},
}Expand description
Lifecycle errors.
Variants that wrap an underlying failure carry it as a typed
std::error::Error::source instead of a pre-rendered String, so
callers can branch on the concrete cause (e.g. io::ErrorKind) via
source().downcast_ref::<std::io::Error>() and tracing subscribers
receive the full chain. context keeps the exact text the old
String payloads rendered, so Display output (which operators grep
and HTTP error bodies embed) is unchanged.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Task(JoinError)
Blocking task failed or panicked.
Invariant(String)
Internal finalization invariant violated (no underlying error
exists to attach, e.g. a recovery path found the session still
referenced elsewhere). Shares the Task Display prefix so
operator log greps for “finalization task failed:” keep
matching the messages this variant absorbed from Task.
Receipt
Receipt issuance failed.
Fields
context: StringHuman-readable description (Display-compatible with the old
Receipt(String) payload).
source: Option<ErrorSource>Underlying typed error, when one exists.
Atif
ATIF persistence or parsing failed.
Fields
source: Option<ErrorSource>Underlying typed error, when one exists.
Promotion(String)
Promotion is invalid for this session. Genuinely semantic refusals — there is never an underlying error to attach.
CaptureIncomplete
One or more upstream actions were not captured.
ToolEvidence(String)
Tool evidence is unresolved or temporarily unreadable. Leave the finalization claim retryable without discarding execution evidence.
Bridge
Lifecycle event could not be durably published.
Fields
context: StringHuman-readable description (Display-compatible with the old
Bridge(String) payload).
source: Option<ErrorSource>Underlying typed error, when one exists.
BridgeConfig
Lifecycle bridge failed due to a PERMANENT
misconfiguration (e.g. BusError::UnknownTopic — the topic
was not provisioned via the manifest). SDKs should NOT
retry this; the operator must fix the config. Historically
this collapsed into Bridge(_) and mapped to HTTP 503 +
Retry-After, so clients retried pointlessly. Kept as a
distinct variant so finalize_error_response can route it
to 400 (no Retry-After) while genuine transient failures
keep 503 semantics.
Fields
context: StringHuman-readable description (Display-compatible with the old
BridgeConfig(String) payload).
source: Option<ErrorSource>Underlying typed error, when one exists.
Implementations§
Source§impl FinalizeError
impl FinalizeError
Sourcepub fn receipt(context: impl Into<String>) -> Self
pub fn receipt(context: impl Into<String>) -> Self
Semantic receipt failure with no underlying typed error.
Sourcepub fn receipt_source<E>(error: E) -> Self
pub fn receipt_source<E>(error: E) -> Self
Receipt failure caused by a typed error. The error text is kept
in context so Display matches the old stringified payload,
while the value itself stays reachable via Error::source().
Sourcepub fn atif(context: impl Into<String>) -> Self
pub fn atif(context: impl Into<String>) -> Self
Semantic ATIF failure with no underlying typed error.
Sourcepub fn atif_source<E>(error: E) -> Self
pub fn atif_source<E>(error: E) -> Self
ATIF failure caused by a typed error (see Self::receipt_source).
Sourcepub fn bridge(context: impl Into<String>) -> Self
pub fn bridge(context: impl Into<String>) -> Self
Semantic bridge failure with no underlying typed error.
Sourcepub fn bridge_source<E>(error: E) -> Self
pub fn bridge_source<E>(error: E) -> Self
Bridge failure caused by a typed error (see Self::receipt_source).
Sourcepub fn is_transient_io(&self) -> bool
pub fn is_transient_io(&self) -> bool
True iff this error is caused by a transient I/O condition
(spool disk full, read-only filesystem, spool storage
temporarily unreachable). The response layer maps these to
503 Service Unavailable + Retry-After rather than the
default 500 Internal Server Error, matching the
/readyz probe policy that already treats ENOSPC/EROFS as
transient. Same permanence-split discipline as
Bridge vs BridgeConfig.
Walks the source chain via std::error::Error::source so
an av_atif::WriteError { source: io::Error } or an
av_receipts::SignError { source: io::Error } are both
detected regardless of how deep the wrap is.
Trait Implementations§
Source§impl Debug for FinalizeError
impl Debug for FinalizeError
Source§impl Display for FinalizeError
impl Display for FinalizeError
Source§impl Error for FinalizeError
impl Error for FinalizeError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<BusError> for FinalizeError
impl From<BusError> for FinalizeError
Source§fn from(error: BusError) -> Self
fn from(error: BusError) -> Self
Preserve the permanence classification when
converting a bridge error into a Finalize error. Permanent
causes (unknown topic, serde) route to BridgeConfig so
clients see a 4xx status without Retry-After; transient
causes (I/O, backend outage) stay Bridge and keep 503
with Retry-After. The BusError itself is retained as the
typed source so its own chain (e.g. io::Error) survives.
Auto Trait Implementations§
impl Freeze for FinalizeError
impl !RefUnwindSafe for FinalizeError
impl Send for FinalizeError
impl Sync for FinalizeError
impl Unpin for FinalizeError
impl UnsafeUnpin for FinalizeError
impl !UnwindSafe for FinalizeError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string()] Read more§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString]. Read more