Part of the core-rebuild epic — follows the shared rigor contract there.
Component
src/reply.rs (~1,048 LOC). Reply, DelegatedReply, ForwardedReply, ReplySender, ReplyError.
Learning & discussion
The reply channel is an in-process oneshot — no serialization locally. Delegated/forwarded replies let another actor answer on this actor's behalf. Dropping a ReplySender without replying must surface an error to the caller, never hang.
Existing crates
tokio::sync::oneshot for the reply channel — evaluate.
Research — best algorithm/approach
Reply-channel lifecycle; delegated/forwarded-reply patterns; drop-without-reply semantics.
Testing — hard as fuck
Lifecycle (drop ReplySender → caller gets ReplyError, not a hang), sequence, linearizability (concurrent ask + reply). DST over reply/drop races. Mutation: cargo-mutants, zero survivors.
Part of the core-rebuild epic — follows the shared rigor contract there.
Component
src/reply.rs(~1,048 LOC).Reply,DelegatedReply,ForwardedReply,ReplySender,ReplyError.Learning & discussion
The reply channel is an in-process oneshot — no serialization locally. Delegated/forwarded replies let another actor answer on this actor's behalf. Dropping a
ReplySenderwithout replying must surface an error to the caller, never hang.Existing crates
tokio::sync::oneshotfor the reply channel — evaluate.Research — best algorithm/approach
Reply-channel lifecycle; delegated/forwarded-reply patterns; drop-without-reply semantics.
Testing — hard as fuck
Lifecycle (drop
ReplySender→ caller getsReplyError, not a hang), sequence, linearizability (concurrent ask + reply). DST over reply/drop races. Mutation:cargo-mutants, zero survivors.