fix(slice-1): F6 — drop dead Channel.created_at field
Adversarial review F6 (Low, confirmed): Channel.created_at: Instant was
drafted 'for the idle timeout' (spec §5.1) but the timer keys off
RtcSession.last_rtp_rx (and now last_rtp_rx after F4), never creation
time. The field was never read; the Instant import it pulled is dropped
with it.
Spec §5.1 already reconciled in 8680f2b (struct sketch + comment).
Spec §4.5 already specified 'no RTP' (60 s); the contradiction with
the old 5-min lineage is closed.
Refactor phase — full test suite + clippy green; no behavior change.
This commit is contained in:
@@ -59,7 +59,6 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
use std::time::Instant;
|
||||
use uuid::Uuid;
|
||||
|
||||
/// Newtype wrapping a `Uuid` for the channel id.
|
||||
@@ -133,25 +132,24 @@ pub enum Direction {
|
||||
|
||||
/// The unifying leg object — one peer = one `Channel` (spec §5.1).
|
||||
///
|
||||
/// Slice 1 carries signaling state only. Fields that arrive later, listed
|
||||
/// in spec §5.6, are absent by design — adding them is a backwards-
|
||||
/// compatible field add:
|
||||
/// Slice 1 carried signaling state only; slice-2 added `tap` (spec §5.2, §6).
|
||||
/// Other fields arrive later, listed in spec §5.6, by backwards-compatible
|
||||
/// addition:
|
||||
/// - `media: Option<MediaLeg>` — second consumer.
|
||||
/// - `audiohooks: Vec<AudiohookHandle>` — escalation rung 2.
|
||||
/// - `tap: Option<TapHandle>` — step 2.
|
||||
///
|
||||
/// (F6 review patch: an earlier sketch carried `created_at: Instant` "for
|
||||
/// the idle timeout," but the timer keys off `RtcSession.last_rtp_rx`, not
|
||||
/// creation time. The field was dead; the work-pool would have populated
|
||||
/// it on every `new_inbound` and never read it. Dropped along with its
|
||||
/// `Instant` import.)
|
||||
#[derive(Debug)]
|
||||
pub struct Channel {
|
||||
pub id: ChannelId,
|
||||
pub state: ChannelState,
|
||||
pub direction: Direction,
|
||||
/// For the 60 s idle timeout (spec §4.5). `Instant` is a monotonic
|
||||
/// clock — choosing it over `SystemTime` means we're measuring
|
||||
/// elapsed wall-time within this process, NOT a calendar time the
|
||||
/// user could change mid-call. The monotonic clock is the right
|
||||
/// tool for "has this peer been silent for 60 seconds?"
|
||||
pub created_at: Instant,
|
||||
/// NEW (slice-2, spec §5.2, §6): None until Connected, set on Connected,
|
||||
/// cleared on Closing. State invariant — see the table below.
|
||||
/// cleared on Closing. State invariant — see the table in slice-2 spec §6.
|
||||
pub tap: Option<TapHandle>,
|
||||
}
|
||||
|
||||
@@ -162,7 +160,6 @@ impl Channel {
|
||||
id: ChannelId::new(),
|
||||
state: ChannelState::New,
|
||||
direction: Direction::Inbound,
|
||||
created_at: Instant::now(),
|
||||
tap: None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user