export type SessionTimelineSeqCursor = | { epoch: string; endSeq: number; } | null | undefined; export type SessionTimelineSeqDecision = "accept" | "drop_stale" | "drop_epoch" | "gap" | "init"; export function classifySessionTimelineSeq({ cursor, epoch, seq, }: { cursor: SessionTimelineSeqCursor; epoch: string; seq: number; }): SessionTimelineSeqDecision { if (!cursor) { return "init"; } if (cursor.epoch !== epoch) { return "drop_epoch"; } if (seq <= cursor.endSeq) { return "drop_stale"; } if (seq === cursor.endSeq + 1) { return "accept"; } return "gap"; }