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:
opencode controller
2026-06-28 20:02:30 -04:00
parent ede94a14b6
commit 36bb4caa3f

View File

@@ -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,
}
}