pub enum Verdict {
Never,
Stale,
Behind,
Working,
Idle,
}Expand description
★ What one standby’s row SAYS, in one word — decided here and nowhere else (one implementation), so the CLI row, the console badge, the appliance band and the alarm cannot disagree about the same standby.
§The alarm that lied
🔴 MEASURED on the reference appliance 2026-08-31: gunnar control replication list
printed pending 0 · failures 0 · last success <ts> · STALE on a box with
nothing wrong with it. Staleness was now - last_success > 10x the retry ceiling and nothing else, and the last success is a clock that stops the
moment there is nothing to replicate — so every standby on a quiet weekend
crossed the threshold and shouted about it. An alarm that fires on a Sunday
is an alarm an operator learns to ignore, which is worse than none.
The distinction the word has to carry is fallen behind versus nothing to do, and it is not a question about time since a success. It is a question about outstanding work:
Verdict::Idle— nothing queued, nothing in flight, nothing failing. There is no work, so the age of the last success measures the weekend and not the standby.Verdict::Working— work in hand, inside the retry ceiling. An ordinary push on its way.Verdict::Behind— work outstanding for longer than the retry ceiling (BEHIND_AFTER_RETRY_MAX). Five minutes with the shipped defaults.Verdict::Stale— and nothing has landed for ten times the ceiling. Fifty minutes with the shipped defaults, and it is now a statement about work that is not moving rather than about a quiet box.Verdict::Never— not one byte, ever. Its own word because it needs its own action:resyncafter fixing the address or the key, not “wait”.
Variants§
Never
Not one byte has ever reached this standby.
Stale
Work is stuck AND nothing has landed for STALENESS_FACTORx the
retry ceiling.
Behind
Work outstanding longer than the retry ceiling.
Working
Work in hand, inside the ceiling.
Idle
Nothing outstanding and nothing failing: there is nothing to do.
Implementations§
Trait Implementations§
impl Copy for Verdict
impl Eq for Verdict
impl StructuralPartialEq for Verdict
Auto Trait Implementations§
impl Freeze for Verdict
impl RefUnwindSafe for Verdict
impl Send for Verdict
impl Sync for Verdict
impl Unpin for Verdict
impl UnsafeUnpin for Verdict
impl UnwindSafe for Verdict
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request