struct SenderCandidate {
name: String,
tier: &'static str,
last_seen_ms: Option<i64>,
stale_eligible: bool,
channel: Option<String>,
local_url: Option<String>,
}Expand description
One already-fetched candidate, tagged with the tier it was found on.
Keeps classify_sender pure and independent of AgentRegistration/
AgentEntry/LanInstance’s actual (differently-shaped) types — the
handler below does the field mapping once, at the IO boundary, same
discipline as dock_node_views/last_error_frame above.
Fields§
§name: String§tier: &'static str"host" | "cross-channel" | "lan" | "wan" — NOT "spawner";
that tier is checked entirely client-side by muxspect.mjs before
this route is ever called (it depends on the CALLER’s own
environment, which this handler has no way to observe). See
docs/specs/SPEC_MUXSPECT_VERIFY_SENDER_2026_08_21.md.
last_seen_ms: Option<i64>§stale_eligible: boolWhether last_seen_ms is a genuinely-refreshed heartbeat this
candidate’s tier can be judged stale by. false for host tier —
ReactiveHandler::list_agents() is synchronously accurate (an
agent is removed from it on unregister, not aged out by timestamp;
see bootstrap/network.rs’s 20s heartbeat task’s own doc comment:
“always accurate, with no staleness window of its own”) and nothing in
this codebase currently calls update_last_seen to refresh
AgentRegistration.last_seen after registration — applying a
staleness cutoff to it would eventually flag every healthy,
long-running host-tier agent as stale (#2702). false for WAN too (last_seen_ms is always None there —
cloud_subscriber doesn’t track a per-agent heartbeat). true for
cross-channel (the same 20s heartbeat task above re-writes the
shared registry’s updated_at for every live host-tier agent) and
LAN (mDNS peers re-announce and bump last_seen on every
ServiceResolved).
channel: Option<String>§local_url: Option<String>Auto Trait Implementations§
impl Freeze for SenderCandidate
impl RefUnwindSafe for SenderCandidate
impl Send for SenderCandidate
impl Sync for SenderCandidate
impl Unpin for SenderCandidate
impl UnsafeUnpin for SenderCandidate
impl UnwindSafe for SenderCandidate
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>. Box<dyn Any> can
then be further downcast into Box<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>. Rc<Any> 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> DowncastSync for T
impl<T> DowncastSync for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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