use crateSpan;
/// Greedy swim-lane packing: give each span the lowest-numbered lane whose
/// previous span has already finished. Overlapping work lands on separate rows;
/// sequential work reuses a row. Spans are considered in start-time order, so
/// the result is deterministic for a given input (golden-file friendly).
///
/// Only `Span::lane` is mutated; the slice order is left untouched.